JavaRush /Java Blog /Random-ID /Pelacakan tumpukan Java
IvanDurov
Level 25

Pelacakan tumpukan Java

Dipublikasikan di grup Random-ID
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: Pelacakan tumpukan Java - 1
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 m1pada gilirannya memanggil m2. Sekarang metode ini m2melompat ke puncak tumpukan, menghapus sementara m1. Bayangkan ini sejenak - maindi atas m1dan di atas m2! Setelah menyelesaikan urusannya, m2ia 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 m1metode 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 maintidak menangkap pengecualian, Anda akan mendapatkan pesan kesalahan aneh yang tercetak di jendela keluaran. Sebagai contoh, buatlah metode Anda m2seperti 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 ArithmeticExceptionyang menangkap pembagian tanpa kesalahan. Tidak ada penangan kesalahan dalam metode m2, m1dan . mainJadi program memprosesnya dengan penangan kesalahan default. Ubah metode Anda m1menjadi berikut:
try {
    System.out.println("Первый метод передаёт привет!(m1)");
    m2( );
}
catch (ArithmeticException err) {
    System.out.println(err.getMessage());
}
Sekarang kita telah membungkus metode ini m2dalam 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 m2tidak dijalankan sepenuhnya, tetapi dihentikan ketika terjadi kesalahan. Kontrol kemudian ditransfer kembali m1. Hal ini terjadi karena fakta bahwa blok itu catchsendiri 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 mainpemanggilannya m1. Dan baris terakhir dari metode tersebut maindapat 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...
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION