Dalam tutorial ini, kita akan belajar menggunakan kata kunci throw and throws untuk penanganan pengecualian dengan bantuan contoh.
Di Java, pengecualian dapat dikategorikan menjadi dua jenis:
- Pengecualian dicentang: Mereka tidak diperiksa pada saat kompilasi tetapi pada run-time.For contoh:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, pengecualian di bawahError
kelas, dll - Pengecualian yang Dicentang: Mereka diperiksa pada waktu kompilasi. Sebagai contoh,
IOException
,InterruptedException
, dll
Lihat Pengecualian Java untuk mempelajari secara detail tentang pengecualian yang dicentang dan yang tidak dicentang.
Biasanya, kami tidak perlu menangani pengecualian yang tidak dicentang. Itu karena pengecualian yang tidak dicentang terjadi karena kesalahan pemrograman. Dan, merupakan praktik yang baik untuk memperbaikinya daripada menanganinya.
Tutorial ini sekarang akan fokus pada bagaimana menangani pengecualian yang dicentang 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 (Tidak ada file atau direktori seperti itu)
Saat kita menjalankan program ini, jika file test.txt
tidak ada, FileInputStream
melempar a FileNotFoundException
yang memperluas IOException
kelas.
Jika sebuah metode tidak menangani pengecualian, jenis pengecualian yang mungkin terjadi di dalamnya harus ditentukan dalam throws
klausul sehingga metode lebih jauh dalam tumpukan panggilan dapat menanganinya atau menetapkannya menggunakan throws
kata kunci itu sendiri.
The findFile()
metode menentukan bahwa IOException
dapat dibuang. The main()
pemanggilan metode metode ini dan menangani pengecualian jika dibuang.
Melempar banyak pengecualian
Inilah cara kami membuat 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 menetapkan bahwa hal itu bisa melempar NullPointerException
, IOException
dan InvalidClassException
dalam nya throws
klausul.
Perhatikan bahwa kami belum menangani NullPointerException
. Ini karena ini adalah pengecualian yang tidak dicentang. Tidak perlu menentukannya dalam throws
klausul dan menanganinya.
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 sulit dibaca.
throws
ini juga berguna ketika Anda telah memeriksa pengecualian (pengecualian yang harus ditangani) yang tidak ingin Anda tangkap dalam metode Anda saat ini.
Kata kunci lemparan Java
Kata throw
kunci digunakan untuk secara eksplisit menampilkan satu pengecualian.
Ketika sebuah eksepsi dilemparkan, aliran eksekusi program berpindah dari satu try
blok ke catch
blok lain. Kami menggunakan throw
kata kunci dalam suatu metode.
Sintaksnya adalah:
throw throwableObject;
Objek yang dapat dibuang adalah turunan dari kelas Throwable
atau subkelas dari Throwable
kelas tersebut.
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
Pengecualian di utas "main" java.lang.ArithmeticException: Mencoba membagi dengan 0 di Main.divideByZero (Main.java:3) di Main.main (Main.java:7) status keluar 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
Berkas tidak ditemukan
The findFile()
Metode melempar IOException
dengan pesan kami melewati ke konstruktor.
Perhatikan bahwa karena ini adalah pengecualian yang dicentang, kita harus menentukannya dalam throws
klausa.
Metode yang memanggil findFile()
metode ini perlu menangani pengecualian ini atau menetapkannya menggunakan throws
kata kunci itu sendiri.
Kami telah menangani pengecualian ini dalam main
()
metode ini. Alur eksekusi program berpindah dari satu try
blok ke catch
blok lain saat pengecualian dilemparkan. Jadi, sisa kode di try
blok tersebut dilewati dan pernyataan di catch
blok tersebut dijalankan.