Java Coba dan Tangkap Penggunaan <BR /> Meskipun penangan pengecualian default yang disediakan oleh Java Runtime System berguna untuk debugging, Anda biasanya ingin menangani pengecualian sendiri. Ada dua manfaat untuk melakukan ini. Pertama, memungkinkan Anda untuk memperbaiki kesalahan. Kedua, itu mencegah program dari penghentian secara otomatis. Sebagian besar pengguna kesal (untuk sedikitnya) tentang mencetak trek tumpukan saat program berakhir dan setiap kali terjadi kesalahan. Untungnya, ini mudah dihindari.
Untuk mencegah dan menangani kesalahan runtime, Anda hanya perlu memasukkan kode yang ingin Anda pantau menjadi blok mencoba. Mengikuti blok coba, termasuk klausa tangkapan yang menentukan jenis kesalahan yang ingin Anda tangkap. Sangat mudah untuk menyelesaikan tugas ini.
class exc2 {public void main (string args []) {int d, a; dicetak. ");} catch (ArithMeticException e) {// Catch Divide-by-Zero Error System.out.println (" Divisi oleh Zero. ");} System.out.println (" Setelah pernyataan C ATCH. ") ;}} Output program sebagai berikut:
Divisi oleh Zero.Eafter Catch Pernyataan.
Perhatikan bahwa panggilan ke println () di blok coba tidak pernah dieksekusi. Setelah pengecualian dinaikkan, kontrol program ditransfer dari blok coba ke blok tangkapan. Eksekusi tidak pernah "kembali" dari blok tangkapan ke blok mencoba. Jadi, "Ini tidak akan dicetak."
Tidak akan ditampilkan. Setelah pernyataan tangkapan dieksekusi, kontrol program berlanjut dari baris berikut dari seluruh mekanisme percobaan/tangkapan.
Pernyataan dan pernyataan tangkapannya membentuk unit. Ruang lingkup klausa tangkapan terbatas pada pernyataan yang ditentukan sebelum pernyataan coba. Pernyataan tangkapan tidak dapat menangkap pengecualian yang diajukan oleh pernyataan percobaan lain (kecuali itu adalah kasus pernyataan percobaan bersarang).
Pernyataan yang dilindungi oleh percobaan harus berada dalam penjepit (yaitu, mereka harus berada di blok). Anda tidak dapat menggunakan cobalah sendiri.
Tujuan membangun klausa tangkapan adalah untuk menyelesaikan pengecualian dan terus berjalan seolah -olah kesalahan tidak terjadi. Misalnya, dalam program berikut, masing -masing untuk loop diulang untuk mendapatkan dua bilangan bulat acak. Kedua bilangan bulat ini dibagi oleh pihak lain masing -masing, dan hasilnya digunakan untuk membagi 12345. Hasil akhir ada dalam a. Jika operasi divisi menghasilkan kesalahan divisi nol, itu akan ditangkap, nilai A diatur ke nol, dan program terus berjalan.
// menangani pengecualian dan pindah. ); {System.out.println ("Division By Zero.");Tunjukkan deskripsi pengecualian
Melempar kelebihan metode ToString () (ditentukan oleh objek), sehingga mengembalikan string yang berisi deskripsi pengecualian. Anda dapat menampilkan deskripsi pengecualian dengan meneruskan parameter ke pengecualian di println (). Misalnya, blok tangkapan dari program sebelumnya dapat ditulis ulang sebagai
Catch (ArithMeticException E) {System.out.println ("Exception:" + E); Ketika versi ini menggantikan versi dalam program asli, program berjalan di bawah interpreter Javajdk standar, dan setiap kesalahan dibagi dengan nol menampilkan pesan berikut:
Pengecualian: java.lang.arithmeticexception: / by nol
Meskipun tidak ada nilai khusus dalam konteks, kemampuan untuk menampilkan deskripsi pengecualian sangat berharga dalam kasus lain - terutama ketika Anda bereksperimen dan men -debug pengecualian.
Penggunaan Java Multiple Catch Pernyataan <BR /> Dalam beberapa kasus, beberapa pengecualian mungkin disebabkan oleh segmen kode tunggal. Untuk menangani situasi ini, Anda dapat mendefinisikan dua atau lebih klausa tangkapan, yang masing -masing menangkap pengecualian dari satu jenis. Ketika pengecualian dinaikkan, setiap klausa tangkapan diperiksa dalam urutan, dan klausa pertama yang cocok dengan jenis pengecualian dieksekusi. Ketika pernyataan tangkapan dieksekusi, klausa lain dilewati, dan eksekusi berlanjut dari kode setelah blok mencoba/menangkap. Contoh berikut mendesain dua jenis pengecualian yang berbeda:
// Demonstrasi pernyataan tangkap. Class Multicatch {public static void main (string args []) {coba {int a = args.length; ; out .println ("indeks array oob:" + e);Program berjalan dalam kondisi awal tanpa parameter baris perintah yang menghasilkan pengecualian yang tidak dibagi karena A adalah 0. Jika Anda memberikan parameter baris perintah, itu akan bertahan, mengatur nilai ke nilai yang lebih besar dari nol. Tetapi itu akan menyebabkan arrayIndexout dari Exception BoundSeption karena array integer C panjangnya 1 dan program mencoba untuk menetapkan nilai untuk C [42].
Berikut adalah output dari program yang berjalan dalam dua situasi yang berbeda:
C:/> java multicatcha = 0Divide oleh 0: java.lang.arithmeticException:/oleh nol setelah coba/tangkap bloks.c:/> java multicatch testarga = 1Array index oob: j ava.lang.ArrayIndExoutOfBoundsException Setelah mencoba/menangkap blok.
Ketika Anda menggunakan pernyataan multi-catch, penting untuk diingat bahwa subclass pengecualian harus digunakan sebelum salah satu kelas induknya. Ini karena menggunakan pernyataan tangkapan kelas induk akan menangkap pengecualian untuk jenis dan semua jenis subkelasnya. Dengan cara ini, jika subclass berada di belakang kelas induk, subclass tidak akan pernah tiba. Selain itu, kode yang tidak dapat dicapai di Java adalah kesalahan. Misalnya, pertimbangkan prosedur berikut:
/* Program ini berisi kesalahan. Subkelas harus datang sebelum superclassnya dalam serangkaian pernyataan tangkapan. args []) {coba {int a = 0; RithmeticException adalah subkelas dari pengecualian.Jika Anda mencoba mengkompilasi program, Anda akan menerima pesan kesalahan bahwa pernyataan tangkapan kedua tidak akan tiba karena pengecualian telah ditangkap. Karena ArithMeticException adalah subkelas dari pengecualian, pernyataan tangkapan pertama akan menangani semua kesalahan berorientasi pengecualian, termasuk ArithmeticException. Ini berarti bahwa pernyataan tangkapan kedua tidak akan pernah dieksekusi. Untuk memodifikasi program, membalikkan urutan dua pernyataan tangkapan.