Pengecualian lwn Ralat
Tingkah laku yang tidak dijangka pasti akan berlaku apabila program sedang dijalankan. Ini mungkin disebabkan oleh pengecualian atau ralat. Pengecualian ialah peristiwa, yang boleh mengganggu aliran program biasa. Ralat adalah keadaan yang boleh dianggap tidak dapat dipulihkan. Pengecualian kebanyakannya berkaitan dengan aplikasi itu sendiri, manakala ralat berkaitan dengan sistem tempat program dijalankan.
Apakah Pengecualian?
Pengecualian ialah peristiwa, yang boleh mengganggu aliran program biasa. Nama pengecualian berasal daripada "peristiwa luar biasa". Melontar pengecualian ialah proses mencipta objek pengecualian dan menyerahkannya kepada sistem masa jalan. Objek pengecualian dicipta oleh kaedah di mana pengecualian berlaku. Objek pengecualian mengandungi maklumat berguna seperti jenis dan perihalan pengecualian. Apabila sistem runtime menerima objek pengecualian, ia akan cuba mencari seseorang untuk mengendalikannya dalam timbunan panggilan dengan melintasinya dalam susunan terbalik (di mana kaedah dipanggil). Tindanan panggilan ialah senarai kaedah yang dipesan, yang dipanggil sebelum kaedah di mana pengecualian berlaku. Sistem runtime berjaya jika ia menemui kaedah dengan pengendali pengecualian. Pengendali pengecualian ialah blok kod yang boleh mengendalikan pengecualian tersebut secara rasmi. Jika sistem runtime menemui pengendali yang sesuai (iaitu jenis pengecualian sepadan dengan jenis yang boleh dikendalikan), ia akan menghantar objek pengecualian kepada pengendali. Ini dipanggil menangkap pengecualian. Walau bagaimanapun, jika pengecualian tidak dapat dikendalikan, program akan ditamatkan. Di Jawa, pengecualian diwarisi daripada ‘kelas Boleh Lempar.’ NullPointerException dan ArrayIndexOutOfBoundsException ialah dua pengecualian biasa di Jawa.
Apakah Ralat?
Ralat ialah keadaan yang boleh dianggap tidak boleh dipulihkan seperti program yang memerlukan jumlah memori yang lebih besar daripada yang tersedia. Ralat ini tidak boleh dikendalikan semasa masa jalan. Jika ralat berlaku, program akan ditamatkan. Di Java, ralat diwarisi daripada kelas Throwable. Ralat biasanya merujuk kepada masalah serius yang pengaturcara (atau aplikasi) tidak sepatutnya cuba menangkap. Ralat hanyalah keadaan yang tidak normal, yang tidak pernah dijangka berlaku dalam keadaan biasa, dan oleh itu tidak pernah diramalkan. Sebagai contoh, OutOfMemoryError, StackOverflowError dan ThreadDead ialah ralat sedemikian. Kaedah tidak boleh mempunyai pengendali untuk ralat.
Apakah perbezaan antara Pengecualian dan Ralat?
Kedua-dua ralat dan pengecualian adalah kejadian yang tidak diingini semasa pelaksanaan program. Walau bagaimanapun, mereka mempunyai perbezaan utama. Pengecualian boleh diramalkan oleh pengaturcara, manakala ralat sukar untuk diramalkan. Pengecualian boleh disemak atau dinyahtanda. Tetapi ralat sentiasa tidak disemak. Pengecualian biasanya menunjukkan ralat yang disebabkan oleh pengaturcara. Walau bagaimanapun, ralat berlaku disebabkan oleh ralat sistem atau penggunaan sumber yang tidak sesuai. Oleh itu, pengecualian harus dikendalikan pada peringkat aplikasi, manakala ralat harus dijaga pada peringkat sistem (hanya jika boleh). Selepas mengendalikan pengecualian, anda dijamin akan kembali ke aliran program biasa. Tetapi walaupun ralat ditangkap, pengaturcara mungkin tidak tahu bagaimana untuk mengendalikannya di tempat pertama. Tidak seperti pengendalian ralat tradisional, pengecualian membenarkan pengasingan kod pengendalian ralat daripada kod biasa.