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 bawahError
kelas, 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 throw
dan throws
.
Java membuang kata kunci
Kami menggunakan throws
kata 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 throws
untuk 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.txt
tidak ada, FileInputStream
lemparkan a FileNotFoundException
yang memanjangkan IOException
kelas.
Sekiranya kaedah tidak menangani pengecualian, jenis pengecualian yang mungkin berlaku di dalamnya mesti dinyatakan dalam throws
klausa sehingga kaedah yang lebih jauh dalam timbunan panggilan dapat mengatasinya atau menentukannya menggunakan throws
kata kunci itu sendiri.
The findFile()
kaedah menyatakan bahawa yang IOException
boleh 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 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()
kaedah menyatakan bahawa ia boleh membuang NullPointerException
, IOException
dan InvalidClassException
dalam yang throws
fasal.
Perhatikan bahawa kami belum menangani NullPointerException
. Ini kerana ia adalah pengecualian yang tidak diperiksa. Tidak perlu menentukannya dalam throws
klausa dan mengatasinya.
baling kata kunci Vs. cuba… tangkap… akhirnya
Mungkin ada beberapa kaedah yang boleh menyebabkan pengecualian. Menulis try… catch
untuk 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 throw
kunci digunakan untuk membuang pengecualian tunggal secara eksplisit.
Apabila pengecualian dilemparkan, aliran pelaksanaan program berpindah dari try
blok ke catch
blok. Kami menggunakan throw
kata kunci dalam satu kaedah.
Sintaksnya adalah:
throw throwableObject;
Objek yang boleh dilempar adalah contoh kelas Throwable
atau subkelas 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(); ) )
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 IOException
dengan mesej yang kami diserahkan kepada pembina itu.
Perhatikan bahawa kerana ini adalah pengecualian yang diperiksa, kita mesti menentukannya dalam throws
klausa.
Kaedah yang memanggil findFile()
kaedah ini perlu menangani pengecualian ini atau menentukannya sendiri menggunakan throws
kata kunci.
Kami telah menangani pengecualian ini dalam main
()
kaedah ini. Aliran pelaksanaan program berpindah dari try
blok ke catch
blok ketika pengecualian dilemparkan. Oleh itu, selebihnya kod di try
blok dilangkau dan penyataan di catch
blok dijalankan.