. .

BAGIAN KE DELAPAN: JAVA Error Handling - Stack Trace Pada Netbeans IDE

Posted by CHRISTIANTO D,WIBOWO | D3MI-2016 STMIK BUMI GORA On Selasa, Januari 17, 2017 No comments

BAGIAN KE DELAPAN: JAVA Error Handling - Stack Trace Pada Netbeans IDE, Sebelum kita meneruskan mempelajari pembelajaran ini, ada baiknya kita baca artikel-artikel sebelumnya yang terhubung dengan langkah-langkah pembelajaran ini (Link) BAHASA PEMROGRAMAN JAVA PADA NETBEANS IDE.  

Dalam aliran normal dari sebuah program, ketika Java Virtual Machine menjalankan kode kita, satu persatu metode akan dieksekusi, dimulai dengan metode utama. Ketika metode memiliki gilirannya di kepala antrian pemrograman disebut berada di atas tumpukan/stack. Setelah seluruh metode tersebut telah dieksekusi, eksekusi diambil dari tumpukan/stack diganti dengan metode berikutnya dalam antrian.


Untuk menggambarkan pokok pemrograman, ubah kode program yang telah kita buat sebelumnya (lihat chapter sebelumnya BAGIAN KE DELAPAN: JAVA Error Handling and Exceptions Pada Netbeans IDE) menjadi seperti ini:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package errorhandling;

/**
 *
 * @author CHRISTIANTO "GEMBLONG" DHARMA WIBOWO LEARN JAVA
 */
public class errorChecking {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     
        System.out.println("Starting Main method");
        m1();
        System.out.println("End Main method");
        }
    static void m1() {
        System.out.println("Method One - m1");
        m2();
        }
    static void m2() {
        System.out.println("Method Two - m2");
    }
}
Kita sekarang memiliki metode utama Starting Main method dan dua metode lainnya "Method One - m1" dan "Method Two - m2". Ketika program pertama dimulai, metode utama berada di atas tumpukan/stack. Namun, dalam metode utama kita memiliki panggilan ke metode m1. Ketika metode ini disebut melompat ke atas tumpukan/stack. Metode m1 pada gilirannya memanggil metode m2. Ketika m2 disebut, ia melompat ke atas tumpukan/stack, mendorong m1 ke samping sementara. Setelah selesai dengan m2, kontrol diberikan kembali ke m1. Ketika m1 selesai, hal itu akan mendorongnya dari atas tumpukan/stack, dan kontrol diserahkan kembali ke metode utama. Kita jalankan programnya dan jendela Output akan tercetak:
Jika ada yang salah dalam metode m2, JVM akan melihatnya untuk penanganan error, seperti try … catch block. Jika tidak ada penanganan error, Eksepsi akan diserahkan kepada m1 untuk melihat apakah ada kesalahan. Karena tidak memiliki kesalahan penanganan dalam m1, jadi Eksepsi dilewatkan ke tumpukan/satck, dan kembali ke metode utama.
Jika metode utama tidak berurusan dengan Eksepsi maka kitaa akan mendapatkan pesan error yang aneh dicetak untuk jendela Output. Sebagai contoh, sesuaikan metode m2 dengan ini:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package errorhandling;

/**
 *
 * @author CHRISTIANTO "GEMBLONG" DHARMA WIBOWO LEARN JAVA
 */
public class errorChecking {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
   
        System.out.println("Starting Main method");
        m1();
        System.out.println("End Main method");
        }
    static void m1() {
        System.out.println("Method One - 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");
    }
}
Kita jalankan programnya dan jendela Output akan tercetak:
Apa yang kita lihat pada jendela Output adalah sesuatu yang disebut Stack Trace. Tiga baris di garis bawah biru merujuk pada metode kita, dan di mana mereka dapat ditemukan:
package_name.class_name.method_name
Pada Window Output di atas adalah di mana kesalahan pertama terjadi, di m2. Java sedang mencari ini dan ditangani oleh ArithmeticException, yang mana membagi dengan nol adalah kesalahan yang harus ditangkap.
Exception in thread "main" java.lang.ArithmeticException: / by zero
Tidak ada penanganan kesalahan pada m2, m1, atau utama. Jadi program ini dikeluarkan untuk penangan kesalahan default, artinya compile tetap berjalan dan karena tidak ada penanganan kesalahan yang mengatasinya atau membuat sebuah Exception-pengecualian, maka kode-kode yang berada pada baris-baris kode tersebuat juga tidak diproses (dilewati).
  • at errorhandling.errorChecking.m2(errorChecking.java:31)
  • at errorhandling.errorChecking.m1(errorChecking.java:25)
  • at errorhandling.errorChecking.main(errorChecking.java:20)
Mari kita ubah kode pada metode m1 seperti ini:
package errorhandling;
/**
 *
 * @author CHRISTIANTO "GEMBLONG" DHARMA WIBOWO LEARN JAVA
 */
public class errorChecking {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {      
        System.out.println("Starting Main method");
        m1();
        System.out.println("End Main method");
        }
    static void m1() {
        try {
        System.out.println("Method One - m1");
        m2( );
        }
        catch (ArithmeticException err) {
        System.out.println( err.getMessage( ) );
        }
    }    
    static void m2( ) {
        int x = 10;
        int y = 0;
        double z = x / y;
        System.out.println( z );
        System.out.println("Method Two - m2");
    }
}
Sekarang kita telah membungkus metode yang disebut m2 di try block. Di bagian catch, kita telah menggunakan jenis Exception yang dilaporkan dalam stack trace - ArithmeticException.
Kita jalankan programnya dan jendela Output akan tercetak:
Perhatikan bahwa pesan kesalahan dicetak: "/ by zero". Seluruh metode m2 tidak dieksekusi, tetapi dihentikan di mana kesalahan terjadi. Kontrol kemudian diteruskan kembali ke m1. Karena ada blok catch menangani kesalahan tersebut, JVM tidak melihat kebutuhan untuk kesalahan handler default, tapi dicetak pesan antara kurung keriting tangkapan.

Program itu sendiri tidak dihentikan, namun. Kontrol disahkan kembali ke metode utama, di mana metode m1 dipanggil. Baris terakhir dalam metode Utama, mencetak "End Main method", dieksekusi. Ini memiliki implikasi penting. Misalkan kita membutuhkan nilai dari m1, karena kita akan melakukan sesuatu dengan itu di metode utama. Nilai tidak akan berada di sana, dan program mungkin tidak berjalan seperti yang diharapkan.

Tetapi jika kita melihat stack trace di jendela Output, perlu di ingat bahwa baris kode pertama adalah di mana masalah terjadi; sisa baris kode, jika ada, yang mana diserahkan ke Eksepsi di atas tumpukan/stack, biasanya penyelesaian akan kembali pada metode utama. Pada bagian berikutnya, kita akan melihat Kesalahan Logic - Logic Errors.

0 komentar:

Posting Komentar