JavaRush /Java Blog /Random-ID /Pengecualian dan penanganannya
articles
Level 15

Pengecualian dan penanganannya

Dipublikasikan di grup Random-ID
Pengecualian atau situasi (keadaan) luar biasa adalah kesalahan yang terjadi dalam suatu program selama pengoperasiannya. Semua pengecualian di Java adalah objek. Oleh karena itu, mereka dapat dihasilkan tidak hanya secara otomatis ketika situasi luar biasa terjadi, tetapi juga dibuat oleh pengembangnya sendiri. Hierarki kelas pengecualian: Pengecualian dan penanganannya - 1Pengecualian dibagi menjadi beberapa kelas, tetapi semuanya memiliki nenek moyang yang sama - kelas Throwable. Keturunannya adalah subkelas Exceptiondan Error. Pengecualian ( Exceptions) adalah akibat dari masalah dalam suatu program yang, pada prinsipnya, dapat dipecahkan dan diprediksi. Misalnya, pembagian dengan nol terjadi pada bilangan bulat. Kesalahan ( Errors) adalah masalah yang lebih serius yang dinyatakan dalam spesifikasi Java dan tidak boleh Anda coba tangani dalam program Anda sendiri karena ini adalah masalah tingkat JVM. Misalnya, pengecualian semacam ini terjadi jika memori yang tersedia untuk mesin virtual telah habis. Program ini masih tidak dapat memberikan memori tambahan untuk JVM. Di Java, semua pengecualian dibagi menjadi tiga jenis: pengecualian yang dicentang ( checked) dan pengecualian yang tidak dicentang ( unchecked) yang mencakup kesalahan ( Errors) dan pengecualian run-time ( RuntimeExceptionsturunan kelas Exception). Pengecualian terkontrol adalah kesalahan yang dapat dan harus ditangani dalam suatu program; semua turunan suatu kelas Exception(tetapi tidak RuntimeException) termasuk dalam tipe ini. Penanganan pengecualian dapat dilakukan dengan menggunakan operator try…catchatau ditransfer ke bagian eksternal program. Misalnya, suatu metode dapat meneruskan pengecualian yang terjadi di tingkat yang lebih tinggi dalam hierarki panggilan tanpa menanganinya sendiri. Pengecualian yang tidak dicentang tidak memerlukan penanganan, namun Anda dapat menangani pengecualian kelas jika diinginkan RuntimeException. Mari kompilasi dan jalankan program berikut:
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Saat diluncurkan, pesan berikut akan ditampilkan di konsol:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
Pesan tersebut menunjukkan kelas pengecualian yang terjadi - ArithmeticException. Pengecualian ini dapat ditangani:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Sekarang, alih-alih pesan kesalahan standar, sebuah blok akan dieksekusi catch, yang parameternya adalah objek e dari kelas yang sesuai dengan pengecualian (objek itu sendiri dapat diberi nama apa pun, itu akan diperlukan jika kita ingin melempar secara paksa pengecualian ini lagi, misalnya, sehingga diperiksa beberapa penangan lainnya). Dalam hal ini, blok tersebut tryberisi fragmen program yang berpotensi menyebabkan pengecualian. Seseorang trydapat berhubungan dengan beberapa blok tangkapan dengan kelas pengecualian yang berbeda.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
     int[] m = {-1,0,1};
        Scanner sc = new Scanner(System.in);
        try {
            int a = sc.nextInt();
            m[a] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        }
    }
}
Jika, setelah meluncurkan program yang disajikan, pengguna memasukkan dari keyboard 1 atau 2, program akan berjalan tanpa membuat pengecualian apa pun. Jika pengguna memasukkan 0, pengecualian kelas akan terjadi ArithmeticExceptiondan akan ditangani oleh blok pertama catch. Jika pengguna memasukkan 3, pengecualian kelas akan terjadi ArrayIndexOutOfBoundsException(array di luar batas), dan akan diproses oleh blok kedua catch. Jika pengguna memasukkan angka non-integer, misalnya 3.14, maka akan terjadi pengecualian kelas InputMismatchException(tipe input tidak cocok), dan akan ditampilkan dalam format kesalahan standar, karena kami tidak menanganinya dengan cara apa pun. Namun, Anda dapat menambahkan pengendali untuk kelas tersebut Exception, karena kelas ini adalah kelas induk untuk semua pengecualian lain yang dicentang, ia akan menangkap salah satu dari pengecualian tersebut (termasuk InputMismatchException).
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int[] m = {-1,0,1};
        int a = 1;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            m[a-1] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        } catch (Exception e) {
            System.out.println("Произошло ещё Howое-то исключение");
        }
    }
}
Karena pengecualian dibangun berdasarkan hierarki kelas dan subkelas, Anda harus mencoba menangani pengecualian yang lebih spesifik terlebih dahulu, baru kemudian menangani pengecualian yang lebih umum. Artinya, jika kita menempatkan blok dengan penanganan pengecualian kelas terlebih dahulu (dan bukan yang ketiga) Exception, kita tidak akan pernah melihat pesan kesalahan apa pun selain "Beberapa pengecualian lain telah terjadi" (semua pengecualian akan langsung ditangkap oleh blok ini dan tidak akan sampai ke blok tersebut. istirahat). Tambahan opsional pada blok try…catchdapat berupa blok finally. Perintah yang ditempatkan di dalamnya akan dijalankan dalam hal apa pun, terlepas dari apakah terjadi pengecualian atau tidak. Meskipun ketika pengecualian yang tidak tertangani terjadi, bagian program yang tersisa setelah pembuatan pengecualian ini tidak dijalankan. Misalnya, jika pengecualian terjadi selama beberapa penghitungan yang panjang, finallyAnda dapat menampilkan atau menyimpan hasil antara dalam satu blok. Tautan ke sumber: Pengecualian dan penanganannya
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION