Java cuba ... tangkap (Dengan Contoh)

Dalam tutorial ini, kita akan belajar mengenai pernyataan cubaan menangkap di Java dengan bantuan contoh.

The try… catchblok di Jawa digunakan untuk mengendalikan pengecualian dan menghalang penamatan abnormal program.

Inilah sintaks try… catchblok di Java.

 try( // code ) catch(exception) ( // code )

The tryblok termasuk kod yang mungkin menjana pengecualian.

The catchblok termasuk kod yang dilaksanakan apabila ada berlaku pengecualian di dalam tryblok.

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 tryblok.

Apabila program menemui kod ini, ArithmeticExceptionberlaku. Dan, pengecualian ditangkap oleh catchblok dan melaksanakan kod di dalam catchblok.

The catchblok hanya dilaksanakan jika wujud pengecualian di dalam tryblok.

Catatan : Di Java, kita dapat menggunakan tryblok tanpa catchblok. Namun, kita tidak boleh menggunakan catchblok tanpa tryblok.

Java cuba … akhirnya blok

Kita juga boleh menggunakan tryblok 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 tryblok bersama dengan finallyblok tersebut. Kita dapat melihat bahawa kod di dalam tryblok menyebabkan pengecualian.

Walau bagaimanapun, kod di dalam finallyblok dijalankan tanpa mengira pengecualian.

Java cuba … tangkap … akhirnya blok

Di Jawa, kita juga dapat menggunakan blok akhirnya setelah try… catchblok 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 5dan 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 finallyblok selalu dijalankan, kami telah memasukkan kod untuk menutup bahagian PrintWriterdalam 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 finallyblok tidak dijalankan:

  • Penggunaan System.exit()kaedah
  • Pengecualian berlaku di finallyblok
  • Kematian benang

Blok tangkapan berganda

Untuk setiap tryblok, boleh ada blok sifar atau lebih catch. Pelbagai catchblok membolehkan kita menangani setiap pengecualian secara berbeza.

Jenis argumen bagi setiap catchblok 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 arrukuran 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, IndexOutOfBoundExceptionberlaku.

Apabila pengecualian berlaku di tryblok,

  • Pengecualian dilemparkan ke catchblok pertama . catchBlok pertama tidak mengatasi IndexOutOfBoundsException, jadi ia dilanjutkan ke catchblok seterusnya .
  • catchBlok kedua dalam contoh di atas adalah pengendali pengecualian yang sesuai kerana mengendalikan sebuah IndexOutOfBoundsException. 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 catchblok.

Ini mengurangkan penduaan kod dan meningkatkan kesederhanaan dan kecekapan kod.

Setiap jenis pengecualian yang dapat ditangani oleh catchblok 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.

Artikel menarik...