Pengecualian vs Kesalahan
Perilaku tak terduga pasti terjadi saat program sedang berjalan. Ini bisa disebabkan oleh pengecualian atau kesalahan. Pengecualian adalah peristiwa, yang dapat mengganggu aliran program normal. Kesalahan adalah kondisi yang dapat dianggap tidak dapat dipulihkan. Pengecualian sebagian besar terkait dengan aplikasi itu sendiri, sedangkan kesalahan terkait dengan sistem tempat program berjalan.
Apa itu pengecualian?
Pengecualian adalah suatu peristiwa, yang dapat mengganggu aliran program normal. Pengecualian nama berasal dari "acara luar biasa". Melempar pengecualian adalah proses membuat objek pengecualian dan menyerahkannya ke sistem runtime. Objek pengecualian dibuat dengan metode di mana pengecualian terjadi. Objek pengecualian berisi informasi yang berguna seperti jenis dan deskripsi pengecualian. Ketika sistem runtime menerima objek pengecualian, ia akan mencoba menemukan seseorang untuk menanganinya di dalam tumpukan panggilan dengan melintasi dalam urutan terbalik (di mana metode dipanggil). Tumpukan panggilan adalah daftar metode yang dipesan, yang dipanggil sebelum metode di mana pengecualian terjadi. Sistem runtime berhasil jika menemukan metode dengan penangan pengecualian. Exception Handler adalah blok kode yang secara resmi dapat menangani pengecualian tersebut. Jika sistem runtime menemukan penangan yang sesuai (i.e. jenis pengecualian cocok dengan jenis yang dapat ditangani), itu akan meneruskan objek pengecualian ke pawang. Ini disebut menangkap pengecualian. Namun, jika pengecualian tidak dapat ditangani, program akan berakhir. Di Java, pengecualian mewarisi dari 'kelas yang dapat dilempar.'NullpointerException dan ArrayIndExoutOfBoundsException adalah dua pengecualian umum di java.
Apa itu kesalahan?
Kesalahan adalah suatu kondisi yang dapat dianggap tidak dapat dipulihkan seperti program yang membutuhkan jumlah memori yang lebih besar dari apa yang tersedia. Kesalahan ini tidak dapat ditangani saat runtime. Jika terjadi kesalahan, program akan berakhir. Di Java, kesalahan mewarisi dari kelas yang dapat dilempar. Kesalahan biasanya mendukung masalah serius bahwa programmer (atau aplikasi) tidak boleh mencoba menangkap. Kesalahan hanyalah kondisi abnormal, yang tidak pernah diharapkan terjadi dalam keadaan normal, dan karenanya tidak pernah diramalkan. Misalnya, OutofMemoryError, Stackoverflowerror dan ThreadDead adalah kesalahan seperti itu. Metode tidak boleh memiliki penangan untuk kesalahan.
Apa perbedaan antara pengecualian dan kesalahan?
Baik kesalahan dan pengecualian adalah kejadian yang tidak diinginkan selama pelaksanaan suatu program. Namun, mereka memiliki perbedaan utama. Pengecualian dapat diramalkan oleh programmer, sementara kesalahan sulit untuk diramalkan. Pengecualian dapat diperiksa atau tidak dicentang. Tapi kesalahan selalu tidak terkendali. Pengecualian biasanya menunjukkan kesalahan yang disebabkan oleh programmer. Namun, kesalahan terjadi karena kesalahan sistem atau penggunaan sumber daya yang tidak tepat. Oleh karena itu, pengecualian harus ditangani pada tingkat aplikasi, sementara kesalahan harus diurus pada tingkat sistem (hanya jika memungkinkan). Setelah menangani pengecualian, Anda dijamin akan kembali ke aliran program normal. Tetapi bahkan jika kesalahan tertangkap, programmer mungkin tidak tahu bagaimana menanganinya di tempat pertama. Tidak seperti penanganan kesalahan tradisional, pengecualian memungkinkan pemisahan kode penanganan kesalahan dari kode biasa.