Dalam tutorial, kita akan belajar tentang pendekatan yang berbeza dari pengendalian pengecualian di Java dengan bantuan contoh.
Dalam tutorial terakhir, kami belajar mengenai pengecualian Java. Kami tahu bahawa pengecualian menghentikan pelaksanaan program secara tidak normal.
Inilah sebabnya mengapa penting untuk menangani pengecualian. Berikut adalah senarai pendekatan yang berbeza untuk menangani pengecualian di Java.
- cuba… tangkap blok
- akhirnya menyekat
- kata kunci balingan dan lempar
1. Java cuba… tangkap blok
Blok try-catch digunakan untuk menangani pengecualian di Java. Inilah sintaksis try… catch
blok:
try ( // code ) catch(Exception e) ( // code )
Di sini, kami telah meletakkan kod yang mungkin menghasilkan pengecualian di dalam try
blok. Setiap try
blok diikuti oleh catch
blok.
Apabila pengecualian berlaku, ia ditangkap oleh catch
blok. The catch
blok tidak boleh digunakan tanpa try
blok.
Contoh: Pengendalian pengecualian menggunakan cubaan… tangkapan
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Pengeluaran
ArithmeticException => / dengan sifar
Sebagai contoh, kami cuba membahagikan nombor dengan 0
. Di sini, kod ini menghasilkan pengecualian.
Untuk menangani pengecualian, kami telah meletakkan kod tersebut 5 / 0
di dalam try
blok. Sekarang apabila pengecualian berlaku, selebihnya kod di dalam try
blok dilangkau.
The catch
blok menangkap pengecualian dan kenyataan di dalam blok tangkapan dilaksanakan.
Sekiranya tidak ada penyataan di try
blok yang menghasilkan pengecualian, catch
blok tersebut dilangkau.
2. Java akhirnya menyekat
Di Jawa, finally
blok tersebut selalu dijalankan tidak kira ada pengecualian atau tidak.
The finally
blok adalah pilihan. Dan, untuk setiap try
blok, hanya boleh ada satu finally
blok.
Sintaks asas finally
blok adalah:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Sekiranya pengecualian berlaku, finally
blok dijalankan selepas try… catch
blok tersebut. Jika tidak, ia dilaksanakan selepas blok cubaan. Untuk setiap try
blok, hanya boleh ada satu finally
blok.
Contoh: Pengendalian Pengecualian Java menggunakan blok akhirnya
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Pengeluaran
ArithmeticException => / dengan sifar Ini adalah blok akhirnya
Dalam contoh di atas, kita membahagikan nombor dengan 0 di dalam try
blok. Di sini, kod ini menghasilkan ArithmeticException
.
Pengecualian ditangkap oleh catch
blok. Dan, finally
blok itu dilaksanakan.
Catatan : Amalan yang baik untuk menggunakan finally
blok. Ini kerana ia boleh merangkumi kod pembersihan penting seperti,
- kod yang mungkin dilewatkan secara tidak sengaja dengan mengembalikan, meneruskan atau memutuskan
- menutup fail atau sambungan
3. Kata kunci melempar dan melempar Java
Kata throw
kunci Java digunakan untuk secara eksplisit membuang satu pengecualian.
Apabila kita throw
terkecuali, aliran program bergerak dari try
blok ke catch
blok.
Contoh: Pengendalian pengecualian menggunakan balingan Java
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Pengeluaran
Pengecualian dalam utas "main" java.lang.ArithmeticException: Mencuba membahagi dengan 0 di Main.divideByZero (Main.java:5) di Main.main (Main.java:9)
Dalam contoh di atas, kami secara eksplisit membuang ArithmeticException
penggunaan throw
kata kunci.
Begitu juga, throws
kata kunci digunakan untuk menyatakan jenis pengecualian yang mungkin berlaku dalam kaedah tersebut. Ia digunakan dalam deklarasi kaedah.
Contoh: Java membuang kata kunci
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate 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 (Sistem tidak dapat mencari fail yang ditentukan)
Semasa kita menjalankan program ini, jika file test.txt tidak ada, FileInputStream
lemparkan a FileNotFoundException
yang meluaskan IOException
kelas.
The findFile()
kaedah menyatakan bahawa yang IOException
boleh dibuang. The main()
kaedah memanggil kaedah ini dan boleh mengendalikan pengecualian jika ia dibuang.
Sekiranya kaedah tidak menangani pengecualian, jenis pengecualian yang mungkin berlaku di dalamnya mesti dinyatakan dalam throws
klausa.
Untuk mengetahui lebih lanjut, lawati lemparan dan lemparan Java.