Takut akan kesalahan, tetapi jangan menulisnya di Java! Anda mungkin sudah mengetahui beberapa hal tentang exception di Java . Hari ini, setidaknya pengetahuan yang dangkal akan menguntungkan Anda. Kami akan menganalisis kelas Kesalahan dan jenis pengecualian khusus yang menakutkan banyak orang saat muncul di jejak tumpukan mereka.

Di bagian atas hierarki pengecualian Java adalah kelas Throwable , yang memiliki dua keturunan:

  • Pengecualian , yang bertanggung jawab atas kesalahan dalam program Anda.
  • Dan pahlawan kita hari ini — Error , yang bertanggung jawab atas error di JVM.
    Perlu disebutkan bahwa ini mungkin bukan bug pengkodean, melainkan masalah yang biasanya tidak bergantung pada pengembang.

Apa yang harus dilakukan dengan Kesalahan

Saat menangkap "kesalahan", Anda tidak dapat melakukan tindakan apa pun di blok tangkap , kecuali untuk masuk , karena kita berbicara tentang masalah di JVM itu sendiri.

Pencatatan itu baik: ketika Anda mendapatkan kesalahan waktu proses, Anda dapat melihat log, melihat penyebabnya, dan mengetahui apa yang harus diperbaiki.

Karena Anda tidak tahu kesalahan seperti apa yang mungkin Anda dapatkan saat menulis kode, tidak masuk akal untuk menulis jenis tertentu di blok catch . Menggunakan kelas Error itu sendiri juga bukan solusi terbaik, karena dalam hal ini, Anda hanya akan menemukan error.

Oleh karena itu, lebih baik menggunakan kelas Throwable , yang dapat menangkap Error dan Exception . Bagaimana ini terlihat dalam praktiknya?

Tidak baik menulis kode seperti ini:

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
Menulis kode seperti ini juga tidak boleh:

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
Tapi kode seperti ini OK:

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

Opsi kedua untuk menangani error adalah melemparnya lebih tinggi setelah mendeklarasikan klausa throws pada metode tersebut. Teknik ini digunakan ketika kode Anda secara teoritis dapat menimbulkan kesalahan dan Anda ingin memperingatkan semua orang yang mungkin menggunakan kode Anda sehingga mereka dapat menangani kesalahan dengan benar.

Kesalahan Umum

Beberapa kesalahan yang paling populer adalah kelas OutOfMemoryError dan StackOverflowError .

OutOfMemoryError sering muncul saat program tidak memiliki cukup memori untuk membuat objek dan pengumpul sampah tidak dapat mengikutinya. Hasilnya adalah OutOfMemoryError .

Java tidak mengizinkan Anda menghapus objek secara manual untuk mencegah kebocoran memori, tetapi Anda dapat menghindari membuang sampah sembarangan agar tidak membebani pengumpul sampah dan tidak mengacaukan tumpukan.

Misalnya, kode seperti ini akan membuat banyak sampah di memori:


while (true) {
    new Object();
}

Kesalahan kedua yang ingin saya ceritakan adalah StackOverflowError , yang terlempar saat tumpukan meluap. Karena tumpukan terutama menyimpan variabel lokal, parameter, dan pemanggilan metode, rekursi (atau pemanggilan metode rekursif) adalah penyebab yang sangat umum dari kesalahan ini:


public void foo() {
    foo();
}

Untuk menghindari masalah selama eksekusi program, IDE modern sering memperingatkan tentang memanggil metode secara rekursif.

Anda tidak dapat memperbaiki program yang menampilkan Errors , tetapi Anda dapat menulis kode yang tidak akan menampilkan kesalahan dan merusak program Anda. Perhatikan apa yang Anda lakukan dengan memori, buat objek dengan hati-hati, dan panggil metode dengan benar. Jika Anda melakukannya, maka Anda akan memiliki lebih sedikit masalah dalam kode Anda.

Perbedaan antara jenis Kesalahan dan Pengecualian

Kesalahan Pengecualian
Tidak dapat diperbaiki di blok tangkapan Dapat ditangani di blok tangkapan
Tidak terjadi pada waktu kompilasi Dapat ditangkap pada waktu kompilasi
Masalah di JVM Masalah dalam logika kode
Semua Kesalahan tidak dicentang dicentang dan tidak dicentang

Anda tidak dapat menghindari pengecualian di Jawa, tetapi Anda tidak perlu takut pada mereka. Anda hanya perlu memahami apa yang diwakili oleh masing-masing jenis dan tahu cara menanganinya. Itu saja untuk hari ini! Sampai jumpa!