Lemparan Jawa
Melempar dan melempar Java
Dalam tutorial ini, kita akan belajar menggunakan kata kunci throw and throws untuk penanganan eksepsi dengan bantuan contoh.
Di Java, exception dapat dikategorikan menjadi dua jenis:
- Pengecualian Tidak Dicentang: Mereka tidak diperiksa pada waktu kompilasi tetapi pada saat run-time. Misalnya:
ArithmeticException , NullPointerException , ArrayIndexOutOfBoundsException , pengecualian di bawah Error kelas, dll.
- Pengecualian yang Dicentang: Mereka diperiksa pada waktu kompilasi. Misalnya,
IOException , InterruptedException , dll.
Lihat Pengecualian Java untuk mempelajari secara detail tentang pengecualian yang dicentang dan yang tidak dicentang.
Biasanya, kita tidak perlu menangani pengecualian yang tidak dicentang. Itu karena pengecualian yang tidak dicentang terjadi karena kesalahan pemrograman. Dan, merupakan praktik yang baik untuk memperbaikinya alih-alih menanganinya.
Tutorial ini sekarang akan fokus pada cara menangani pengecualian yang diperiksa menggunakan throw dan throws .
Java melempar kata kunci
Kami menggunakan throws kata kunci dalam deklarasi metode untuk mendeklarasikan jenis pengecualian yang mungkin terjadi di dalamnya.
Sintaksnya adalah:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2 … {
// code
}
Seperti yang Anda lihat dari sintaks di atas, kita dapat menggunakan throws untuk mendeklarasikan beberapa pengecualian.
Contoh 1:Java melempar Kata Kunci
import java.io.*;
class Main {
public static void findFile() throws IOException {
// code that may produce IOException
File newFile=new File("test.txt");
FileInputStream stream=new FileInputStream(newFile);
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e){
System.out.println(e);
}
}
}
Keluaran
java.io.FileNotFoundException: test.txt (No such file or directory)
Saat kita menjalankan program ini, jika file test.txt tidak ada, FileInputStream melempar FileNotFoundException yang memperluas IOException kelas.
Jika suatu metode tidak menangani pengecualian, jenis pengecualian yang mungkin terjadi di dalamnya harus ditentukan dalam throws klausa sehingga metode lebih jauh di tumpukan panggilan dapat menanganinya atau menentukannya menggunakan throws kata kunci itu sendiri.
findFile() metode menetapkan bahwa IOException bisa dilempar. main() metode memanggil metode ini dan menangani pengecualian jika dilempar.
Melempar beberapa pengecualian
Inilah cara kita dapat membuang beberapa pengecualian menggunakan throws kata kunci.
import java.io.*;
class Main {
public static void findFile() throws NullPointerException, IOException, InvalidClassException {
// code that may produce NullPointerException
… … …
// code that may produce IOException
… … …
// code that may produce InvalidClassException
… … …
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e1){
System.out.println(e1.getMessage());
} catch(InvalidClassException e2){
System.out.println(e2.getMessage());
}
}
}
Di sini, findFile() metode menentukan bahwa ia dapat membuang NullPointerException , IOException , dan InvalidClassException dalam throws klausa.
Perhatikan bahwa kami belum menangani NullPointerException . Ini karena ini adalah pengecualian yang tidak dicentang. Tidak perlu menentukannya di throws klausa dan tangani.
melempar kata kunci Vs. coba...tangkap...akhirnya
Mungkin ada beberapa metode yang dapat menyebabkan pengecualian. Menulis try...catch untuk setiap metode akan membosankan dan kode menjadi panjang dan kurang terbaca.
throws juga berguna ketika Anda telah memeriksa pengecualian (pengecualian yang harus ditangani) yang tidak ingin Anda tangkap dalam metode Anda saat ini.
Kata kunci Java throw
throw kata kunci digunakan untuk secara eksplisit mengeluarkan satu pengecualian.
Saat pengecualian dilemparkan, aliran eksekusi program ditransfer dari try blokir ke catch memblokir. Kami menggunakan throw kata kunci dalam suatu metode.
Sintaksnya adalah:
throw throwableObject;
Objek yang dapat dilempar adalah turunan dari kelas Throwable atau subkelas dari Throwable kelas.
Contoh 2:Kata kunci lemparan Java
class Main {
public static void divideByZero() {
throw new ArithmeticException("Trying to divide by 0");
}
public static void main(String[] args) {
divideByZero();
}
}
Keluaran
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0
at Main.divideByZero(Main.java:3)
at Main.main(Main.java:7)
exit status 1
Dalam contoh ini, kami secara eksplisit melempar ArithmeticException.
Catatan: ArithmeticException adalah pengecualian yang tidak dicentang. Biasanya tidak perlu menangani pengecualian yang tidak dicentang.
Contoh 3:Melempar pengecualian yang dicentang
import java.io.*;
class Main {
public static void findFile() throws IOException {
throw new IOException("File not found");
}
public static void main(String[] args) {
try {
findFile();
System.out.println("Rest of code in try block");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
Keluaran
File not found
findFile() metode melempar IOException dengan pesan yang kami sampaikan ke konstruktornya.
Perhatikan bahwa karena ini adalah pengecualian yang dicentang, kita harus menentukannya di throws klausa.
Metode yang memanggil findFile() ini metode perlu menangani pengecualian ini atau menentukannya menggunakan throws kata kunci itu sendiri.
Kami telah menangani pengecualian ini di main () metode. Alur eksekusi program ditransfer dari try blokir ke catch blok ketika pengecualian dilemparkan. Jadi, sisa kode di try blok dilewati dan pernyataan dalam catch blok dieksekusi.