Java melempar dan melempar Kata kunci

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 bawah Errorkelas, 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 throwdan throws.

Java melempar kata kunci

Kami menggunakan throwskata 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 throwsuntuk 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.txttidak ada, FileInputStreammelempar a FileNotFoundExceptionyang memperluas IOExceptionkelas.

Jika sebuah metode tidak menangani pengecualian, jenis pengecualian yang mungkin terjadi di dalamnya harus ditentukan dalam throwsklausul sehingga metode lebih jauh dalam tumpukan panggilan dapat menanganinya atau menetapkannya menggunakan throwskata kunci itu sendiri.

The findFile()metode menentukan bahwa IOExceptiondapat dibuang. The main()pemanggilan metode metode ini dan menangani pengecualian jika dibuang.

Melempar banyak pengecualian

Inilah cara kami membuat beberapa pengecualian menggunakan throwskata 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, IOExceptiondan InvalidClassExceptiondalam nya throwsklausul.

Perhatikan bahwa kami belum menangani NullPointerException. Ini karena ini adalah pengecualian yang tidak dicentang. Tidak perlu menentukannya dalam throwsklausul dan menanganinya.

melempar kata kunci Vs. coba … tangkap … akhirnya

Mungkin ada beberapa metode yang dapat menyebabkan pengecualian. Menulis try… catchuntuk 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 throwkunci digunakan untuk secara eksplisit menampilkan satu pengecualian.

Ketika sebuah eksepsi dilemparkan, aliran eksekusi program berpindah dari satu tryblok ke catchblok lain. Kami menggunakan throwkata kunci dalam suatu metode.

Sintaksnya adalah:

 throw throwableObject;

Objek yang dapat dibuang adalah turunan dari kelas Throwableatau subkelas dari Throwablekelas 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 IOExceptiondengan pesan kami melewati ke konstruktor.

Perhatikan bahwa karena ini adalah pengecualian yang dicentang, kita harus menentukannya dalam throwsklausa.

Metode yang memanggil findFile()metode ini perlu menangani pengecualian ini atau menetapkannya menggunakan throwskata kunci itu sendiri.

Kami telah menangani pengecualian ini dalam main()metode ini. Alur eksekusi program berpindah dari satu tryblok ke catchblok lain saat pengecualian dilemparkan. Jadi, sisa kode di tryblok tersebut dilewati dan pernyataan di catchblok tersebut dijalankan.

Artikel yang menarik...