Java menangkap Beberapa Pengecualian

Dalam tutorial ini, kita akan belajar menangani banyak pengecualian di Java dengan bantuan contoh.

Sebelum Java 7, kami harus menulis beberapa kode penanganan pengecualian untuk berbagai jenis pengecualian meskipun ada redundansi kode.

Mari kita ambil contoh.

Contoh 1: Beberapa blok tangkapan

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (ArithmeticException e) ( System.out.println(e.getMessage()); ) catch (ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Keluaran

 / dengan nol 

Dalam contoh ini, dua pengecualian dapat terjadi:

  • ArithmeticException karena kami mencoba membagi angka dengan 0.
  • ArrayIndexOutOfBoundsException karena kita telah mendeklarasikan array integer baru dengan batas array 0 sampai 9 dan kita mencoba untuk memberikan nilai pada indeks 10.

Kami mencetak pesan pengecualian di kedua catchblok yaitu kode duplikat.

Keterkaitan operator penugasan =adalah dari kanan ke kiri, jadi an ArithmeticExceptiondilemparkan terlebih dahulu dengan pesan / oleh nol.

Tangani Beberapa Pengecualian dalam blok tangkapan

Di Java SE 7 dan yang lebih baru, kami sekarang dapat menangkap lebih dari satu jenis pengecualian dalam satu catchblok.

Setiap jenis pengecualian yang dapat ditangani oleh catchblok dipisahkan menggunakan batang atau pipa vertikal |.

Sintaksnya adalah:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block ) 

Contoh 2: Blok multi-tangkapan

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (ArithmeticException | ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Keluaran

 / dengan nol 

Menangkap beberapa pengecualian dalam satu catchblok mengurangi duplikasi kode dan meningkatkan efisiensi.

Bytecode yang dihasilkan saat menyusun program ini akan lebih kecil daripada program yang memiliki banyak catchblok karena tidak ada redundansi kode.

Catatan: Jika sebuah catchblok menangani beberapa pengecualian, parameter catch secara implisit final. Ini berarti kami tidak dapat menetapkan nilai apa pun untuk menangkap parameter.

Menangkap Pengecualian dasar

Saat menangkap beberapa pengecualian dalam satu catchblok, aturan tersebut digeneralisasi menjadi khusus.

Ini berarti bahwa jika ada hierarki pengecualian di catchblok, kita hanya dapat menangkap pengecualian dasar daripada menangkap beberapa pengecualian khusus.

Mari kita ambil contoh.

Contoh 3: Menangkap kelas pengecualian dasar saja

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (Exception e) ( System.out.println(e.getMessage()); ) ) ) 

Keluaran

 / dengan nol 

Kita tahu bahwa semua kelas pengecualian adalah subkelas dari Exceptionkelas tersebut. Jadi, alih-alih menangkap beberapa pengecualian khusus, kita cukup menangkap Exceptionkelasnya.

Jika kelas pengecualian dasar telah ditentukan di catchblok, jangan gunakan kelas pengecualian anak di catchblok yang sama . Jika tidak, kami akan mendapatkan kesalahan kompilasi.

Mari kita ambil contoh.

Contoh 4: Menangkap kelas dasar dan pengecualian anak

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Keluaran

 Main.java:6: error: Alternatif dalam pernyataan multi-catch tidak dapat dihubungkan dengan subclassing 

Dalam contoh ini, ArithmeticExceptiondan ArrayIndexOutOfBoundsExceptionkeduanya merupakan subclass dari Exceptionkelas. Jadi, kami mendapatkan kesalahan kompilasi.

Artikel yang menarik...