CodeGym/Java Blog/Acak/Pengecualian lemparan Java
John Squirrels
Level 41
San Francisco

Pengecualian lemparan Java

Dipublikasikan di grup Acak
anggota
Ke mana pun kita pergi, kejadian tak terduga menanti kita. Gempa bumi, tindakan manusia yang tidak rasional, meteorit... atau sesuatu yang lebih sederhana — bola lampu padam, kartu bank mengalami kerusakan magnet, pengukur bensin rusak. Kita tidak bisa menghentikan kejadian yang tidak terduga, tapi setidaknya kita bisa bersiap menghadapinya. Artinya, kita harus menyiapkan mekanisme tertentu untuk menghadapinya. Dalam dunia pemrograman khususnya bahasa Java, kejadian yang menghalangi suatu program untuk berfungsi secara normal disebut dengan pengecualian, dan mekanisme untuk mencegah terjadinya crash program disebut dengan penanganan pengecualian. Jadi, ketika kejadian tak terduga terjadi dalam suatu program, seperti pembagian dengan nol, program tersebut harus "melemparkan" pengecualian. Penanganan pengecualian merupakan aspek penting dari pemrograman Java yang membantu pengembang mengelola kesalahan dan pengecualian yang mungkin terjadi selama eksekusi suatu program. Pada artikel ini, kita akan fokus pada salah satu konsep dasar penanganan pengecualian: kata kunci Java throw dan cara menggunakannya untuk melempar pengecualian.

Apa Pengecualian di Jawa?

Pengecualian adalah peristiwa yang terjadi selama eksekusi suatu program yang mengganggu aliran normal instruksi program. Ketika pengecualian terjadi, eksekusi program dihentikan, dan pesan kesalahan ditampilkan di konsol. Di Java, ada dua jenis pengecualian: dicentang dan tidak dicentang. Pengecualian yang diperiksa diperiksa pada waktu kompilasi, dan kompiler memastikan bahwa pengecualian tersebut ditangkap atau dideklarasikan oleh metode pemanggilan. Di sisi lain, pengecualian yang tidak dicentang tidak akan diperiksa pada waktu kompilasi, dan pengecualian tersebut dapat ditangkap atau dibiarkan tidak tertangkap. Berikut adalah contoh kode di mana kesalahan mungkin terjadi, tetapi kompiler melewatkannya.
public class Factorial {
   public static long getFactorial(final int number) {
           long fact = 1;
           for (int i = 1; i <= number; i++) {
               fact = fact * i;
           }
           return fact;
   }

   public static void main(String[] args) {
       System.out.println(getFactorial(-5));
       System.out.println(getFactorial(21));

   }

}
Berikut ini keluaran programnya:
1 -4249290049419214848
Program keluar dengan benar, namun memberikan hasil yang salah. Dalam kasus pertama, karena argumen fungsinya negatif, dan faktorialnya tidak berfungsi untuk bilangan negatif. Dalam kasus kedua, hasilnya salah, karena bilangan tersebut terlalu besar untuk dihitung faktorialnya dalam rentang tipe panjang. Ini contoh lainnya. Mari kita menulis sebuah program di mana kita akan membagi satu angka dengan angka lainnya.
public class DivisionExample {

       public static void main(String[] args) {
           int a = 10;
           int b = 0;
           int result = divide(a, b);
           System.out.println(result);
       }

       public static int divide(int a, int b) {
           return a / b;
       }
}
Dalam contoh ini, ArithmeticException akan dilempar karena variabel b adalah nol. Namun kesalahan ini tidak tertangani, sehingga program keluar dengan status yang salah.

Cara melempar pengecualian di Java

Di Java, pengecualian juga merupakan objek, jadi pengecualian dilempar seperti objek Pengecualian baru dibuat. Pengecualian dilemparkan ke dalam program menggunakan pernyataan throw. Biasanya, kedua operasi ini (pembuatan objek dan pelemparan pengecualian) digabungkan menjadi satu:
throw new Exception("error…");
Kata kunci throw di Java digunakan untuk melemparkan pengecualian dari suatu metode atau blok kode ketika terjadi kesalahan atau kondisi luar biasa yang tidak dapat ditangani oleh program saat runtime. Alur program dialihkan ke blok tangkapan terdekat. Blok ini dapat mengatur pengecualian.

Contoh penggunaan kata kunci 'lempar'

Untuk mengilustrasikan fungsionalitas kata kunci throw di Java, mari kita ambil sebuah contoh. Mari kita tuliskan metode untuk menghitung faktorial suatu bilangan. Jika angkanya negatif, maka tidak dapat dihitung, jadi pengecualian harus diberikan. Demikian pula, jika angkanya terlalu besar, hasil faktorialnya akan melebihi ukuran maksimum tipe panjang, dan pengecualian lain akan dilempar. Di sini kami memiliki implementasi metode ini:
public Class Factorial {

public static long getFactorial(final int number) {
   if ((number >= 0) && (number < 21)) {
       long fact = 1;
       for (int i = 1; i <= number; i++) {
           fact = fact * i;
       }
       return fact;
   } else {

//throw new exception here
       throw new IllegalArgumentException("THe argument isn't legal");
   }
}

 public static void main(String[] args) {
       System.out.println(getFactorial(-5));
       System.out.println(getFactorial(21));

   }
}
Dalam contoh ini, jika nilai angkanya negatif, kata kunci throw digunakan untuk membuang instance kelas IllegalArgumentException . Jika Anda menjalankan program, pesan "Argumennya tidak sah" akan ditampilkan di konsol. Eksekusi program akan dihentikan.

Tidak ada lagi kesalahan: menangkap contoh pengecualian

Sekarang mari kita ingat contoh kedua, dengan pembagian dengan nol, dan jalankan dengan penanganan pengecualian.
public class DivisionExample {

    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        try {
            int result = divide(a, b);
            System.out.println(result);
        } catch (ArithmeticException e) {
            System.out.println("Error: division by zero");
        }
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}
Dalam contoh ini, kami telah menambahkan konstruksi coba-tangkap untuk menangani pengecualian pembagian dengan nol. Singkatnya, try-catch-finally adalah konstruksi bahasa pemrograman Java yang memungkinkan Anda menangani pengecualian dan mengeksekusi kode terlepas dari apakah pengecualian terjadi atau tidak. try-catch-finally terdiri dari tiga blok:
  • Blok percobaan . Kode yang berpotensi berbahaya sedang dieksekusi di sini. Itu adalah kode yang dapat memunculkan pengecualian. Jika pengecualian terjadi dalam blok try , eksekusi kode dalam blok tersebut dibatalkan, dan kontrol ditransfer ke blok catch.
  • Blok tangkapan . Di sini pengecualian yang dilempar ditangani. Di blok catch , Anda dapat menentukan pengecualian mana yang akan ditangkap dan logika apa yang akan dijalankan ketika pengecualian tersebut ditangkap.
  • Blok terakhir . Yang ini dijalankan terlepas dari apakah pengecualian terjadi atau tidak. Blok akhirnya digunakan, misalnya, untuk melepaskan sumber daya (seperti menutup file atau soket) yang dialokasikan di blok coba. Anda dapat menghilangkan blok ini.
Konstruksi try -catch-finally memungkinkan kontrol yang lebih tepat atas eksekusi program jika terjadi situasi luar biasa dan membantu mencegah penghentian program yang tidak terduga jika terjadi kesalahan. Sekarang, mari kita kembali ke contoh kita. Jika pembagian dengan nol terjadi selama metode pembagian, ArithmeticException akan dilempar, yang ditangkap oleh blok catch. Di blok catch , kita cukup mencetak pesan kesalahan ke konsol. Jika tidak terjadi pengecualian, program akan melanjutkan eksekusinya.

melempar kata kunci

Kata kunci throws digunakan dalam tanda tangan metode . Jika ya, berarti ada pengecualian yang diberikan pada metode tersebut. Hal ini dapat menyebarkan pengecualian ke tumpukan panggilan dan menunjukkan bahwa pengecualian tidak perlu ditangani dalam metode saat ini. Di Java, "throws" juga dapat digunakan untuk merujuk pada pengecualian khusus yang ditentukan dalam suatu program. Misalnya, suatu metode dapat melakukan pembagian dua angka tetapi memunculkan IllegalArgumentException jika argumen kedua adalah nol:
public static double divide(double a, double b) throws IllegalArgumentException {
    if (b == 0) {
        throw new IllegalArgumentException("Division by zero is not allowed");
    }
    return a / b;
}
Metode ini menggunakan kata kunci throws untuk menunjukkan bahwa IllegalArgumentException dapat dilempar jika argumen kedua adalah null. Jika pengecualian tersebut terjadi saat menjalankan metode, pengecualian tersebut akan diteruskan ke metode pemanggil untuk diproses. Contoh pemanggilan metode:
public static void main(String[] args) {
    double result = 0;
    try {
        result = divide(10, 0);
    } catch (IllegalArgumentException e) {
        System.out.println("Error: " + e.getMessage());
    }
    System.out.println("Result: " + result);
}
Dalam contoh ini, metode Divide() dipanggil dengan argumen 10 dan 0, yang akan memunculkan IllegalArgumentException karena pembagian dengan nol tidak mungkin dilakukan. Pengecualian akan ditangkap oleh blok coba-tangkap , dan pesan kesalahan akan ditampilkan. Program akan menghasilkan nilai nol karena pengecualian menghentikan eksekusi metode Divide() .
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar