Java Uncaught Exceptions <BR /> Sebelum Anda belajar menangani pengecualian dalam suatu program, akan bermanfaat untuk melihat apa yang terjadi jika Anda tidak menanganinya. Applet berikut ini mencakup ekspresi yang sengaja menyebabkan kesalahan yang tidak dibagi nol.
kelas exc0 {public static void main (string args []) {int d = 0;
Ketika sistem runtime Java memeriksa situasi yang dibagi dengan nol, ia membangun objek pengecualian baru dan melempar pengecualian. Hal ini menyebabkan eksekusi Exc0 berhenti, karena begitu pengecualian dilemparkan, itu harus ditangkap oleh penangan pengecualian dan segera diproses. Dalam contoh ini, kami tidak memberikan penangan pengecualian kami sendiri, sehingga pengecualian ditangkap oleh penangan default dari sistem runtime Java. Pengecualian apa pun yang tidak ditangkap oleh program Anda pada akhirnya akan ditangani oleh pawang default. Pawang default menampilkan string yang menggambarkan pengecualian, mencetak jejak tumpukan di mana pengecualian terjadi, dan mengakhiri program.
Berikut adalah output yang dihasilkan oleh interpreter runtime Javajdk standar untuk menjalankan program:
java.lang.arithmeticException: / oleh nol di exc0.main (exc0.java:4)
Catatan Bagaimana nama kelas Exc0, Metode Nama Utama, Nama File Exc0.java dan Nomor Baris 4 disertakan dalam trek penggunaan tumpukan sederhana. Juga, perhatikan bahwa tipe pengecualian yang dilemparkan adalah subclass dari pengecualian yang disebut ArithMeticException, yang lebih jelas menggambarkan jenis metode kesalahan apa. Diskusikan nanti dalam bab ini, Java menyediakan beberapa jenis pengecualian bawaan yang cocok dengan berbagai jenis kesalahan runtime yang mungkin dihasilkan.
Trek tumpukan akan menampilkan urutan panggilan metode yang menghasilkan kesalahan. Misalnya, berikut adalah versi lain dari program sebelumnya yang memperkenalkan kesalahan yang sama, tetapi kesalahan dihasilkan dalam metode lain selain metode utama ():
class exc1 {static void subroutine () {int d = 0;
Hasil trek tumpukan dari handler pengecualian default menunjukkan bagaimana seluruh tumpukan panggilan ditampilkan:
java.lang.arithmeticexception: / oleh nol di exc1.subroutine (exc1.java:4) di exc1.main (exc1.java:7)
Seperti yang Anda lihat, bagian bawah tumpukan adalah baris 7 dari Main, yang menyebut metode subrutin (). Metode ini menyebabkan pengecualian di baris 4. Tumpukan panggilan penting untuk debugging karena menunjukkan langkah -langkah persis yang mengarah pada kesalahan.
Pernyataan Cobalah Java
Coba pernyataan bisa bersarang. Artinya, pernyataan cobalah dapat berada di dalam blok percobaan lain. Setiap kali Anda memasukkan pernyataan, pengecualian sebelum dan sesudah hubungan akan didorong ke tumpukan. Jika pernyataan cobalah internal tidak berisi penangan tangkapan dengan pengecualian khusus, tumpukan akan muncul dan penangan tangkapan dari pernyataan coba berikutnya akan memeriksa apakah cocoknya. Proses ini akan berlanjut sampai pernyataan tangkapan cocok dengan sukses, atau sampai semua pernyataan percobaan bersarang habis. Jika tidak ada pernyataan tangkap yang cocok, sistem runtime Java akan menangani pengecualian ini. Berikut adalah contoh menggunakan pernyataan percobaan bersarang:
// Contoh pernyataan percobaan bersarang. Nestry class {public static void main (string args []) {coba {int a = args.length; Divide-By-Zero Exception. * / Int B = 42 / A; Divide -by-Zero Exception akan dihasilkan oleh kode berikut. Exception ou t -of-bounds. E) {System.out.println ("Indeks Array di luar batas:" + e);
Seperti yang Anda lihat, program ini bersarang. Coba blok dalam satu blok coba. Program ini berfungsi sebagai berikut: Ketika Anda menjalankan program tanpa parameter baris perintah, blok percobaan luar akan menghasilkan pengecualian dibagi dengan nol. Program ini dijalankan dalam kondisi parameter baris perintah, dan kesalahan dibagi dengan blok percobaan bersarang menghasilkan kesalahan yang dapat dibagi. Karena blok bagian dalam tidak cocok dengan pengecualian ini, itu akan meneruskan pengecualian ke blok percobaan luar di mana pengecualian diproses. Jika Anda menjalankan program dengan dua parameter baris perintah, pengecualian batas array dihasilkan oleh blok coba internal. Hasil berikut menggambarkan setiap kasus:
C:/> Java NestryDivide oleh 0: java.lang.arithmeticException:/oleh Zeroc:/> java nestry onea = 1divide oleh 0: java.lang.arithmeticException:/oleh Zeroc:/> Java Nestrtry One TwoA = 2Array out- out- dari Bounds: java.lang.ArrayIndExoutofboundsException
Ketika ada panggilan metode, sarang pernyataan mencoba dapat terjadi secara diam -diam. Misalnya, Anda dapat melakukan panggilan ke metode di blok mencoba. Di dalam metode ini, ada pernyataan mencoba lagi. Dalam hal ini, percobaan di dalam metode ini masih bersarang di blok coba yang memanggil metode secara eksternal. Berikut ini adalah modifikasi dari contoh sebelumnya, dan blok percobaan bersarang dipindahkan ke bagian dalam metode nestrtry ():
/* Coba pernyataan dapat secara implisit bersarang melalui panggilan ke metode. -Pengecualian nol akan dihasilkan oleh kode berikut. F- Bounds Exception. .out .println ("indeks array di luar batas:" + e); Pra-pernyataan berikut akan menghasilkan pengecualian divide-by-nol. ) {System.
Output dari program ini sama dengan contoh sebelumnya.