Dalam tutorial ini, kita akan belajar mengenai pernyataan cubaan menangkap di Java dengan bantuan contoh.
The try… catch
blok di Jawa digunakan untuk mengendalikan pengecualian dan menghalang penamatan abnormal program.
Inilah sintaks try… catch
blok di Java.
try( // code ) catch(exception) ( // code )
The try
blok termasuk kod yang mungkin menjana pengecualian.
The catch
blok termasuk kod yang dilaksanakan apabila ada berlaku pengecualian di dalam try
blok.
Contoh: Java cuba… tangkap blok
class Main ( public static void main(String() args) ( try ( 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
Dalam contoh di atas, perhatikan garis,
int divideByZero = 5 / 0;
Di sini, kami cuba membahagikan nombor dengan sifar . Dalam kes ini, pengecualian berlaku. Oleh itu, kami telah memasukkan kod ini di dalam try
blok.
Apabila program menemui kod ini, ArithmeticException
berlaku. Dan, pengecualian ditangkap oleh catch
blok dan melaksanakan kod di dalam catch
blok.
The catch
blok hanya dilaksanakan jika wujud pengecualian di dalam try
blok.
Catatan : Di Java, kita dapat menggunakan try
blok tanpa catch
blok. Namun, kita tidak boleh menggunakan catch
blok tanpa try
blok.
Java cuba … akhirnya blok
Kita juga boleh menggunakan try
blok bersama dengan blok akhirnya.
Dalam kes ini, blok akhirnya selalu dilaksanakan sama ada terdapat pengecualian di dalam blok percubaan atau tidak.
Contoh: Cuba Java … akhirnya blok
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Pengeluaran
Akhirnya blok selalu dijalankan Pengecualian di utas "utama" java.lang.ArithmeticException: / dengan sifar di Main.main (Main.java:4)
Dalam contoh di atas, kami telah menggunakan try
blok bersama dengan finally
blok tersebut. Kita dapat melihat bahawa kod di dalam try
blok menyebabkan pengecualian.
Walau bagaimanapun, kod di dalam finally
blok dijalankan tanpa mengira pengecualian.
Java cuba … tangkap … akhirnya blok
Di Jawa, kita juga dapat menggunakan blok akhirnya setelah try… catch
blok tersebut. Sebagai contoh,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Pengeluaran
Memasukkan pernyataan cuba Pengecualian => Indeks 5 tidak melebihi batas 5 Penutup PrintWriter
Dalam contoh di atas, kami telah membuat senarai bernama array dan fail bernama output.txt. Di sini, kami cuba membaca data dari array dan menyimpan ke fail.
Perhatikan kodnya,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Di sini, ukuran array adalah 5
dan elemen terakhir array berada di list(4)
. Walau bagaimanapun, kami cuba mengakses elemen di a(5)
dan a(6)
.
Oleh itu, kod menghasilkan pengecualian yang ditangkap oleh blok tangkapan.
Oleh kerana finally
blok selalu dijalankan, kami telah memasukkan kod untuk menutup bahagian PrintWriter
dalam blok akhirnya.
Adalah amalan yang baik untuk menggunakan blok akhirnya untuk memasukkan kod pembersihan penting seperti menutup fail atau sambungan.
Catatan : Terdapat beberapa kes ketika finally
blok tidak dijalankan:
- Penggunaan
System.exit()
kaedah - Pengecualian berlaku di
finally
blok - Kematian benang
Blok tangkapan berganda
Untuk setiap try
blok, boleh ada blok sifar atau lebih catch
. Pelbagai catch
blok membolehkan kita menangani setiap pengecualian secara berbeza.
Jenis argumen bagi setiap catch
blok menunjukkan jenis pengecualian yang dapat dikendalikan olehnya. Sebagai contoh,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Pengeluaran
IndexOutOfBoundsException => Indeks 10 di luar batas untuk panjang 10
Dalam contoh ini, kami telah membuat susunan integer bernama arr
ukuran 10 .
Oleh kerana indeks array bermula dari 0 , elemen terakhir dari array adalah pada arr(9)
. Perhatikan kenyataannya,
arr(10) = 11;
Di sini, kami cuba memberikan nilai pada indeks 10 . Oleh itu, IndexOutOfBoundException
berlaku.
Apabila pengecualian berlaku di try
blok,
- Pengecualian dilemparkan ke
catch
blok pertama .catch
Blok pertama tidak mengatasiIndexOutOfBoundsException
, jadi ia dilanjutkan kecatch
blok seterusnya . catch
Blok kedua dalam contoh di atas adalah pengendali pengecualian yang sesuai kerana mengendalikan sebuahIndexOutOfBoundsException
. Oleh itu, ia dilaksanakan.
Menangkap Pengecualian Pelbagai
Dari Java SE 7 dan yang lebih baru, sekarang kita dapat menangkap lebih dari satu jenis pengecualian dengan satu catch
blok.
Ini mengurangkan penduaan kod dan meningkatkan kesederhanaan dan kecekapan kod.
Setiap jenis pengecualian yang dapat ditangani oleh catch
blok dipisahkan menggunakan bar menegak |
.
Sintaksnya adalah:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Untuk mengetahui lebih lanjut, lawati Java yang memperoleh banyak pengecualian.
Penyataan Java cuba-dengan-sumber
Yang cuba-dengan-sumber kenyataan adalah kenyataan cuba yang mempunyai satu atau lebih pengisytiharan sumber.
Sintaksnya adalah:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Sumber adalah objek yang akan ditutup pada akhir program. Ia mesti dinyatakan dan diinisialisasi dalam pernyataan cuba.
Mari kita ambil contoh.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Yang cuba-dengan-sumber kenyataan juga dirujuk sebagai pengurusan sumber automatik . Penyataan ini secara automatik menutup semua sumber di akhir penyataan.
Untuk mengetahui lebih lanjut, lawati penyataan java try-with-resources.