Kesalahan dapat terjadi selama eksekusi program. Ini adalah masalah umum yang dialami setiap programmer, dari pemula hingga profesional sejati. Tidak semua kesalahan muncul karena kesalahan pengembang. Beberapa di antaranya sulit diprediksi, dan terkadang tidak mungkin dilakukan. Misalnya, saat mengunduh suatu program, koneksi jaringan mungkin tiba-tiba terputus atau listrik padam. Situasi seperti ini disebut pengecualian. Coba dan tangkap adalah bagian konstruksi yang digunakan untuk menangani pengecualian.
Java mencoba dan menangkap blok
Ketika terjadi kesalahan, Java biasanya berhenti dan menghasilkan pesan kesalahan. Proses ini disebut "Java melempar pengecualian". Java menyediakan fasilitas khusus untuk menangani pengecualian. Salah satunya adalah coba...tangkap...akhirnya konstruksi. Berikut adalah sintaks blok coba, blok tangkap, dan blok terakhir.
//try block
try {
// Block of code to try
}
//try catch
catch(Exception e) {
// Block of code to handle errors
}
finally {
// Optional block of code
}
Ketika pengecualian terjadi di blok try, kontrol diteruskan ke blok catch, yang dapat menangani pengecualian tersebut. Jika tidak ada blok seperti itu yang ditemukan, pesan pengecualian yang tidak tertangani ditampilkan kepada pengguna dan eksekusi program selanjutnya dihentikan. Untuk mencegah penghentian darurat seperti itu, Anda perlu menggunakan blok try..catch. ![Java Coba - Tangkap - 1](https://cdn.codegym.cc/images/article/ab0bf0e8-2813-4ec0-827d-164b2284a9a8/800.jpeg)
Secara singkat tentang coba, tangkap, akhirnya, lempar kata kunci
Penanganan pengecualian di Java didasarkan pada penggunaan kata kunci berikut dalam suatu program:- coba — mendefinisikan blok kode di mana pengecualian dapat terjadi;
- catch — mendefinisikan blok kode di mana pengecualian ditangani;
- akhirnya — mendefinisikan blok kode yang opsional, tetapi jika ada, tetap dieksekusi, terlepas dari hasil blok percobaan.
- throw — digunakan untuk memunculkan pengecualian;
- throws — digunakan dalam tanda tangan metode untuk memperingatkan bahwa suatu metode mungkin mengeluarkan pengecualian.
Contoh mudah konstruksi coba-tangkap
Katakanlah kita memiliki program dengan beberapa array.
public class TryTest {
public static void main(String[] args) {
int[] myArray = new int[5];
myArray[7] = 8;
System.out.println(myArray[7]);
}
}
Karena kami mencoba mengakses elemen array dengan indeks yang tidak ada, program akan keluar dengan kesalahan:
Pengecualian di thread "utama" java.lang.ArrayIndexOutOfBoundsException: Indeks 7 di luar batas untuk panjang 5 pada hari.TryTest.main(TryTest.java:6) Proses selesai dengan kode keluar 1
Mari kita modifikasi program ini dan tangani pengecualian ini dengan try-catch. Pertama datang blok coba, kemudian - blok tangkap.
//try catch example
public class TryTest {
public static void main(String[] args) {
try {
int[] myArray = new int[5];
myArray[7] = 8;
System.out.println(myArray[7]);
} catch (Exception myEx) {
System.out.println("The exception was handled...");
}
System.out.println("This is the end of the program...");
}
}
Sekarang hasilnya telah berubah:
Pengecualian telah ditangani... Ini adalah akhir dari program... Proses selesai dengan kode keluar 0 Proses selesai dengan kode keluar 0
Dalam hal ini, program selesai dengan benar, pesan kami ditampilkan di layar. Penghentian program yang benar ditandai dengan kode 0 di akhir proses, sedangkan salah — 1. Saat menggunakan blok try...catch, semua pernyataan di antara pernyataan try dan catch dieksekusi terlebih dahulu. Jika pengecualian terjadi di blok try, maka perintah eksekusi normal berhenti dan melanjutkan ke pernyataan catch. Oleh karena itu, ketika eksekusi program mencapai angka[7]=8; baris, program akan berhenti dan menuju ke blok catch. Dalam kasus kita, kita telah mendeklarasikan variabel myEx dengan tipe Exception. Ini adalah kelas dasar untuk semua pengecualian, sehingga bisa berbeda. Misalnya, ada pengecualian yang bertanggung jawab atas stack overflows, melampaui pengindeksan array, seperti dalam kasus kita, menunjuk ke Null, dan seterusnya. Jika kami tidak menebak jenis pengecualiannya, maka program juga akan salah dihentikan. Namun, kami memilih tipe Exception untuk kesederhanaan contoh, dan ini adalah kelas dasar untuk semua pengecualian. Jadi pernyataan catch (Exception myEx) akan menangani hampir semua pengecualian. Menangani pengecualian dalam kasus ini Setelah blok catch selesai, program melanjutkan pekerjaannya, mengeksekusi semua instruksi lain setelah blok catch. Jika Anda ingin melihat pengecualian yang terjadi, Anda dapat meminta program mencetak jejak tumpukan pemanggilan metode. Inilah yang dilakukan JVM ketika terjadi pengecualian yang tidak tertangkap: ia menghentikan eksekusi program, dan mencetak jejak tumpukan setelah mengeksekusi kode blok akhirnya, jika ada.
public class TryTest {
public static void main(String[] args) {
try {
int[] myArray = new int[5];
myArray[7] = 8;
System.out.println(myArray[7]);
} catch (Exception myEx) {
myEx.printStackTrace();
}
System.out.println("This is the end of the program...");
}
}
Menangani pengecualian dalam kasus ini adalah dengan mencetak tumpukan jejak kesalahan ke konsol menggunakan metode printStackTrace() yang ditentukan dalam kelas Exception .
java.lang.ArrayIndexOutOfBoundsException: Indeks 7 di luar batas untuk panjang 5 hari.TryTest.main(TryTest.java:7) Ini adalah akhir dari program... Proses selesai dengan kode keluar 0
Namun, program tersebut keluar dengan benar.
Akhirnya! Setelah menangkap
Dalam contoh dan definisi kata kunci untuk penanganan pengecualian, kami menyebutkan blok akhirnya. Ini opsional, tetapi jika ada, itu akan dieksekusi terlepas dari hasil blok try. Mari kita ubah tipe pengecualian menjadi NullPointerException.
public class TryTest {
public static void main(String[] args) {
try {
int[] myArray = new int[5];
myArray[7] = 8;
System.out.println(myArray[7]);
} catch (NullPointerException myEx) {
System.out.println("The exception was handled...");
}
finally{
System.out.println(" finally");
}
System.out.println("This is the end of the program...");
}
}
Inilah hasilnya:
Pengecualian di thread "utama" java.lang.ArrayIndexOutOfBoundsException: Indeks 7 di luar batas untuk panjang 5 pada hari.TryTest.main(TryTest.java:7) akhirnya Proses selesai dengan kode keluar 1
Ngomong-ngomong, kita bisa menentukan jenis pengecualian yang benar. Ini dia IndexOutOfBoundsException.
public class TryTest {
public static void main(String[] args) {
try {
int[] myArray = new int[5];
myArray[7] = 8;
System.out.println(myArray[7]);
} catch (IndexOutOfBoundsException myEx) {
System.out.println("The exception was handled...");
}
finally{
System.out.println(" finally");
}
System.out.println("This is the end of the program...");
}
}
Dalam hal ini, outputnya adalah sebagai berikut:
Pengecualian telah ditangani... akhirnya Ini adalah akhir dari program... Proses selesai dengan kode keluar 0
Bagaimana cara kerja pengecualian?
Intinya semua kata —catch, throw, throws hanya bisa digunakan dengan java.lang.Throwable atau turunannya. Misalnya, Anda dapat melakukan ini:
public class MyClass {
public static void main(String[] args) {
try {
} catch (Throwable thr) {
}
}
}
Namun, Anda tidak dapat melakukannya seperti ini:
public class MyClass {
public static void main(String[] args) {
try {
} catch (String thr) {
}
}
}