Java membuang dan melontarkan Kata Kunci

Dalam tutorial ini, kita akan belajar menggunakan kata kunci lempar dan lemparan untuk pengendalian pengecualian dengan bantuan contoh.

Di Jawa, pengecualian dapat dikategorikan menjadi dua jenis:

  • Pengecualian Tidak Berdaftar: Mereka tidak diperiksa pada menyusun masa tetapi pada berjalan-time.For contoh: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, pengecualian di bawah Errorkelas, dan lain-lain
  • Pengecualian yang Diperiksa: Mereka diperiksa pada waktu kompilasi. Sebagai contoh, IOException, InterruptedException, dan lain-lain

Rujuk Pengecualian Java untuk mengetahui secara terperinci mengenai pengecualian yang dicentang dan tidak dicentang.

Biasanya, kita tidak perlu menangani pengecualian yang tidak dicentang. Ini kerana pengecualian yang tidak dicentang berlaku kerana kesalahan pengaturcaraan. Dan, adalah amalan yang baik untuk membetulkannya dan bukannya mengatasinya.

Tutorial ini sekarang akan menumpukan pada bagaimana menangani pengecualian yang diperiksa menggunakan throwdan throws.

Java membuang kata kunci

Kami menggunakan throwskata kunci dalam deklarasi kaedah untuk menyatakan jenis pengecualian yang mungkin berlaku di dalamnya.

Sintaksnya adalah:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Seperti yang anda lihat dari sintaks di atas, kita dapat menggunakan throwsuntuk menyatakan beberapa pengecualian.

Contoh 1: Java membuang 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); ) ) ) 

Pengeluaran

 java.io.FileNotFoundException: test.txt (Tiada fail atau direktori sedemikian) 

Semasa kita menjalankan program ini, jika fail test.txttidak ada, FileInputStreamlemparkan a FileNotFoundExceptionyang memanjangkan IOExceptionkelas.

Sekiranya kaedah tidak menangani pengecualian, jenis pengecualian yang mungkin berlaku di dalamnya mesti dinyatakan dalam throwsklausa sehingga kaedah yang lebih jauh dalam timbunan panggilan dapat mengatasinya atau menentukannya menggunakan throwskata kunci itu sendiri.

The findFile()kaedah menyatakan bahawa yang IOExceptionboleh dibuang. The main()kaedah memanggil kaedah ini dan boleh mengendalikan pengecualian jika ia dibuang.

Melemparkan beberapa pengecualian

Inilah caranya kita dapat melontarkan 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()kaedah menyatakan bahawa ia boleh membuang NullPointerException, IOExceptiondan InvalidClassExceptiondalam yang throwsfasal.

Perhatikan bahawa kami belum menangani NullPointerException. Ini kerana ia adalah pengecualian yang tidak diperiksa. Tidak perlu menentukannya dalam throwsklausa dan mengatasinya.

baling kata kunci Vs. cuba… tangkap… akhirnya

Mungkin ada beberapa kaedah yang boleh menyebabkan pengecualian. Menulis try… catchuntuk setiap kaedah akan membosankan dan kod menjadi panjang dan kurang dibaca.

throws juga berguna ketika anda telah memeriksa pengecualian (pengecualian yang harus ditangani) yang tidak ingin anda gunakan dalam kaedah anda sekarang.

Kata kunci lemparan Java

Kata throwkunci digunakan untuk membuang pengecualian tunggal secara eksplisit.

Apabila pengecualian dilemparkan, aliran pelaksanaan program berpindah dari tryblok ke catchblok. Kami menggunakan throwkata kunci dalam satu kaedah.

Sintaksnya adalah:

 throw throwableObject;

Objek yang boleh dilempar adalah contoh kelas Throwableatau subkelas Throwablekelas.

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(); ) ) 

Pengeluaran

 Pengecualian dalam utas "utama" java.lang.ArithmeticException: Cuba membahagikan dengan 0 di Main.divideByZero (Main.java:3) di Main.main (Main.java:7) status keluar 1 

Dalam contoh ini, kita secara jelas melemparkan sebuah ArithmeticException.

Catatan: ArithmeticException adalah pengecualian yang tidak dicentang. Biasanya tidak diperlukan untuk menangani pengecualian yang tidak dicentang.

Contoh 3: Membuang pengecualian yang diperiksa

 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()); ) ) ) 

Pengeluaran

 Fail tidak dijumpai 

The findFile()Cara melemparkan satu IOExceptiondengan mesej yang kami diserahkan kepada pembina itu.

Perhatikan bahawa kerana ini adalah pengecualian yang diperiksa, kita mesti menentukannya dalam throwsklausa.

Kaedah yang memanggil findFile()kaedah ini perlu menangani pengecualian ini atau menentukannya sendiri menggunakan throwskata kunci.

Kami telah menangani pengecualian ini dalam main()kaedah ini. Aliran pelaksanaan program berpindah dari tryblok ke catchblok ketika pengecualian dilemparkan. Oleh itu, selebihnya kod di tryblok dilangkau dan penyataan di catchblok dijalankan.

Artikel menarik...