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.