Pengecualian vs ralat
Tingkah laku yang tidak dijangka pasti berlaku apabila program sedang berjalan. Ini mungkin disebabkan oleh pengecualian atau kesilapan. Pengecualian adalah peristiwa, yang boleh mengganggu aliran program biasa. Kesalahan adalah syarat yang boleh dianggap tidak dapat dipulihkan. Pengecualian kebanyakannya berkaitan dengan aplikasi itu sendiri, sementara kesilapan berkaitan dengan sistem di mana program ini dijalankan.
Apa itu Pengecualian?
Pengecualian adalah peristiwa, yang boleh mengganggu aliran program biasa. Pengecualian nama datang dari "Acara Luar Biasa". Membuang pengecualian adalah proses membuat objek pengecualian dan menyerahkannya ke sistem runtime. Objek pengecualian dibuat oleh kaedah di mana pengecualian berlaku. Objek Pengecualian mengandungi maklumat berguna seperti jenis dan keterangan pengecualian. Apabila sistem runtime menerima objek pengecualian, ia akan cuba mencari seseorang untuk mengendalikannya dalam timbunan panggilan dengan melintasinya dalam urutan terbalik (di mana kaedah dipanggil). Stack panggilan adalah senarai kaedah yang diperintahkan, yang dipanggil sebelum kaedah di mana pengecualian berlaku. Sistem runtime berjaya jika ia mencari kaedah dengan pengendali pengecualian. Pengendali Pengecualian adalah blok kod yang secara rasmi boleh mengendalikan pengecualian tersebut. Sekiranya sistem runtime menemui pengendali yang sesuai (i.e. jenis pengecualian sepadan dengan jenis yang boleh dikendalikan), ia akan lulus objek pengecualian kepada pengendali. Ini dipanggil menangkap pengecualian. Walau bagaimanapun, jika pengecualian tidak dapat dikendalikan, program akan ditamatkan. Di Jawa, pengecualian mewarisi dari 'kelas yang boleh dibuang.'NullPointerException dan ArrayIndexOutOfBoundSexception adalah dua pengecualian umum di Java.
Apa itu ralat?
Kesalahan adalah syarat yang boleh dianggap tidak dapat dipulihkan seperti program yang memerlukan jumlah memori yang lebih besar daripada yang ada. Kesalahan ini tidak dapat dikendalikan semasa runtime. Sekiranya ralat berlaku, program akan ditamatkan. Di Jawa, kesilapan mewarisi dari kelas yang boleh dibuang. Kesalahan biasanya menimbulkan masalah serius yang pengaturcara (atau permohonan) tidak boleh cuba menangkap. Kesalahan adalah keadaan yang tidak normal, yang tidak pernah dijangka berlaku dalam keadaan biasa, dan oleh itu tidak pernah diramalkan. Sebagai contoh, OutofMemoryError, Stackoverflowerror dan Threaddead adalah kesilapan seperti itu. Kaedah tidak boleh mempunyai pengendali untuk kesilapan.
Apakah perbezaan antara pengecualian dan kesilapan?
Kedua -dua kesilapan dan pengecualian adalah kejadian yang tidak diingini semasa pelaksanaan program. Walau bagaimanapun, mereka mempunyai perbezaan utama. Pengecualian boleh diramalkan oleh pengaturcara, sementara ralat sukar untuk diramalkan. Pengecualian boleh diperiksa atau tidak dicentang. Tetapi kesilapan selalu tidak terkawal. Pengecualian biasanya menunjukkan ralat yang disebabkan oleh pengaturcara. Walau bagaimanapun, kesilapan berlaku disebabkan oleh ralat sistem atau penggunaan sumber yang tidak sesuai. Oleh itu, pengecualian harus dikendalikan di peringkat permohonan, sementara kesilapan harus dijaga di peringkat sistem (hanya jika mungkin). Setelah mengendalikan pengecualian, anda dijamin 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 memisahkan kod pengendalian ralat dari kod biasa.