Menguasai Penanganan Multi-Pengecualian di Java
Menguasai Penanganan Multi-Pengecualian di Java
Temukan cara menangkap beberapa pengecualian dengan satu blok catch, sederhanakan kode Anda, dan hindari kesalahan umum.
Sebelum Java 7, pengembang harus menulis blok catch terpisah untuk setiap jenis pengecualian, bahkan ketika logika penanganan identik.
Pertimbangkan skenario berikut.
Contoh 1: Blok catch terpisah
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()); } } }
Output
/ by zero
Dalam contoh ini dua masalah berbeda dapat timbul:
ArithmeticException – pembagian dengan nol. ArrayIndexOutOfBoundsException – mengakses indeks 10 dalam array 10 elemen.
Kedua blok catch melakukan tindakan yang sama, mengarah pada kode duplikat.
Menangkap Beberapa Pengecualian dalam Satu Blok
Sejak Java SE 7, Anda dapat menggabungkan beberapa jenis pengecualian dalam satu blok catch menggunakan pemisah pipe (|).
Sintaks:
try { // kode } catch (ExceptionType1 | ExceptionType2 ex) { // handler }
Contoh 2: Blok multi-catch
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()); } } }
Output
/ by zero
Dengan menggabungkan handler, kode menjadi lebih bersih, bytecode lebih kecil, dan pemeliharaan lebih mudah.
Catatan: Dalam multi-catch, parameter secara implisit final, jadi Anda tidak dapat menetapkan ulangnya.
Menggunakan Kelas Pengecualian Dasar
Jika beberapa pengecualian yang ditangkap memiliki nenek moyang yang sama, Anda dapat menangkap nenek moyang itu daripada mencantumkan setiap subclass.
Contoh 3: Menangkap kelas dasar Exception
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()); } } }
Output
/ by zero
Karena setiap pengecualian spesifik di Java memperluas Exception, satu blok catch ini menangani semua skenario di atas.
Jika pengecualian dasar sudah ditangkap, menyertakan subclass-nya dalam blok catch yang sama akan memicu kesalahan kompilasi.
Contoh 4: Kombinasi yang tidak valid antara pengecualian dasar dan 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()); } } }
Output
Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing
Kesalahan ini terjadi karena ArithmeticException dan ArrayIndexOutOfBoundsException adalah subclass dari Exception, melanggar aturan bahasa.