Mesin Virtual Java (selanjutnya disebut JVM) memproses kode dan menjalankan metode satu demi satu, dimulai dengan metode
main
. Ketika mencapai metode berikutnya, dikatakan bahwa metode ini berada di urutan teratas tumpukan. Setelah suatu metode dijalankan sepenuhnya, metode tersebut akan dihapus dari tumpukan dan digantikan oleh metode berikutnya dalam antrian. Untuk mendemonstrasikan prinsipnya, ketikkan kode ini:
package errorhandling;
public class errorChecking {
public static void main(String[] args) {
System.out.println("Метод Main успешно запущен");
m1();
System.out.println("Метод Main заканчивает свою работу");
}
static void m1() {
System.out.println("Первый метод передаёт привет!(m1)");
m2();
}
static void m2() {
System.out.println("Второй метод передаёт привет(m2)");
}
}
Kami memiliki tiga metode: metode main
, metode m1
, dan metode m2
. Ketika program dimulai, metode ini terletak di bagian atas tumpukan main
. Di dalam metode main
, metode tersebut disebut m1
. Saat dipanggil, dia melompat ke puncak tumpukan. Metode ini m1
pada gilirannya memanggil m2
. Sekarang metode ini m2
melompat ke puncak tumpukan, menghapus sementara m1
. Bayangkan ini sejenak - main
di atas m1
dan di atas m2
! Setelah menyelesaikan urusannya, m2
ia berakhir dan kendali kembali ke m1
. Metode tersebut m1
, ketika selesai, juga dihapus dari tumpukan, dan kontrol kembali diberikan kepada metode tersebut main
. Jalankan program Anda dan lihat jendela keluaran: Metode Utama berjalan dengan sukses Metode pertama mengatakan halo!(m1) Metode kedua mengatakan halo(m2) Metode Utama keluar Jika terjadi kesalahan dalam metode ini m2
, JVM (Java Virtual Machine ), kamu ingat kan?) akan mencari penangan error, misalnya block try … catch
. Jika tidak ada error pada m1
metode error handler, maka eksepsi akan diteruskan ke metode tersebut m1
, dengan harapan mampu mengatasinya. Jika tidak mendeteksi penangan kesalahan di sini, pengecualian akan kembali berpindah ke tumpukan, kali ini ke metode main
. Jika metode ini main
tidak menangkap pengecualian, Anda akan mendapatkan pesan kesalahan aneh yang tercetak di jendela keluaran. Sebagai contoh, buatlah metode Anda m2
seperti ini:
static void m2() {
int x = 10;
int y = 0;
double z = x / y;
System.out.println( z );
System.out.println("Method Two - m2");
}
Metode ini mengandung kesalahan pembagian dengan nol. Ini adalah versi lengkap dari program ini, periksa versi Anda:
package errorhandling;
public class errorChecking {
public static void main(String[] args) {
System.out.println("Метод Main успешно запущен");
m1();
System.out.println("Метод Main заканчивает свою работу");
}
static void m1() {
System.out.println("Первый метод передаёт привет!(m1)");
m2();
}
static void m2() {
int x = 10;
int y = 0;
double z = x / y;
System.out.println( z );
System.out.println("Method Two - m2");
}
}
Jalankan program dan lihat apa yang diberikan oleh jendela keluaran: Metode Utama berjalan dengan sukses Metode pertama mengatakan halo!(m1) Pengecualian di thread "utama" java.lang.ArithmeticException: / dengan nol di errorhandling.errorChecking.m2(<u >errorChecking.java:17</u>) di errorhandling.errorChecking.m1(<u>Solution.java:11</u>) di errorhandling.errorChecking.main(<u>>Solution.java:5</u>) >) Proses selesai dengan kode keluar 1 Anda sedang melihat sesuatu yang disebut pelacakan tumpukan. Tiga baris yang digarisbawahi dengan warna biru mengacu pada metode Anda, dan dapat ditemukan di: Name_пакета.Name_класса.Name_метода
Baris pertama dari atas adalah tempat terjadinya kesalahan - dalam metode m2
. Java memastikan bahwa hal itu ditangani dengan cara ArithmeticException
yang menangkap pembagian tanpa kesalahan. Tidak ada penangan kesalahan dalam metode m2
, m1
dan . main
Jadi program memprosesnya dengan penangan kesalahan default. Ubah metode Anda m1
menjadi berikut:
try {
System.out.println("Первый метод передаёт привет!(m1)");
m2( );
}
catch (ArithmeticException err) {
System.out.println(err.getMessage());
}
Sekarang kita telah membungkus metode ini m2
dalam satu blok try
. Sebagian catch
, kami menggunakan jenis pengecualian yang terdeteksi di jejak tumpukan - ArithmeticException
. Jalankan kode lagi dan Anda akan melihat yang berikut ini di jendela keluaran: Metode Utama berhasil dijalankan Metode pertama mengatakan hello!(m1) / by zero Metode Utama keluar Perhatikan bahwa pesan kesalahan dicetak sebagai: " / by zero " . Metode ini m2
tidak dijalankan sepenuhnya, tetapi dihentikan ketika terjadi kesalahan. Kontrol kemudian ditransfer kembali m1
. Hal ini terjadi karena fakta bahwa blok itu catch
sendiri mengenali kesalahan tersebut; JVM tidak menggunakan penanganan kesalahan standar, tetapi menampilkan pesan yang terletak di antara kurung kurawal blok catch
. Harap dicatat bahwa program itu sendiri belum dihentikan. Kontrolnya, seperti biasa, menuju ke metode main
pemanggilannya m1
. Dan baris terakhir dari metode tersebut main
dapat menampilkan " End Main method ". Ini sangat, sangat penting. Jika Anda memerlukan nilai dari m1
, untuk pekerjaan selanjutnya di suatu tempat di main
. Dan jika nilainya tidak ada, maka program Anda mungkin tidak bekerja seperti yang Anda harapkan. Saat Anda melihat jejak tumpukan di jendela keluaran, ketahuilah bahwa baris pertama adalah tempat terjadinya masalah, dan baris sisanya (jika ada tentu saja) adalah tempat pengecualian disebarkan ke atas tumpukan, biasanya diakhiri dengan main
. Terjemahan dari homeandlearn.co.uk Kami mengucapkan terima kasih kepada: Sergei Sysoev, Treefeed...
GO TO FULL VERSION