Pengecualian vs Ralat
Tingkah laku yang tidak dijangka terikat berlaku apabila program dijalankan. Ini mungkin disebabkan 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 berjalan.
Apa itu Pengecualian?
Pengecualian adalah peristiwa, yang boleh mengganggu aliran program biasa. Pengecualian nama berasal dari "peristiwa luar biasa". Membuang pengecualian adalah proses membuat objek pengecualian dan menyerahkannya kepada sistem runtime. Objek pengecualian dicipta oleh kaedah di mana pengecualian berlaku. Objek pengecualian mengandungi maklumat yang 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 itu berjaya jika ia mencari kaedah dengan pengecualian. Pengendali pengecualian adalah satu blok kod yang secara rasmi dapat menangani pengecualian tersebut. Jika sistem runtime mendapati pengendali yang sesuai (iaitu jenis pengecualian sepadan dengan jenis yang boleh dikendalikan), ia akan menyampaikan objek pengecualian kepada pengendali. Ini dipanggil menangkap pengecualian. Walau bagaimanapun, jika pengecualian tidak dapat dikendalikan, program akan ditamatkan. Di Jawa, pengecualian mewarisi dari 'kelas Throwable.' NullPointerException dan ArrayIndexOutOfBoundsException adalah dua pengecualian biasa di Jawa.
Apakah Ralat?
Kesilapan adalah syarat yang boleh dianggap tidak dapat dipulihkan seperti program yang memerlukan jumlah memori yang lebih besar daripada apa yang tersedia. Kesalahan ini tidak dapat dikendalikan semasa runtime. Jika ralat berlaku, program akan ditamatkan. Di Jawa, kesilapan mewarisi dari kelas Throwable. Kesilapan biasanya menghadapi masalah yang serius bahawa pengaturcara (atau aplikasi) tidak harus cuba untuk menangkap. Kesalahan adalah keadaan yang tidak normal, yang tidak dijangka berlaku dalam keadaan biasa, dan oleh itu tidak pernah diramalkan. Sebagai contoh, OutOfMemoryError, StackOverflowError dan ThreadDead adalah kesilapan sedemikian. Kaedah tidak harus mempunyai pengendali untuk kesilapan.
Apakah perbezaan antara Pengecualian dan Ralat?
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 adalah sukar untuk dijangka. Pengecualian boleh diperiksa atau tidak dicentang. Tetapi kesilapan sentiasa tidak disemak. Pengecualian biasanya menunjukkan ralat yang disebabkan oleh pengaturcara. Walau bagaimanapun, ralat berlaku disebabkan ralat sistem atau penggunaan sumber yang tidak sesuai. Oleh itu, pengecualian perlu dikendalikan di peringkat permohonan, sementara kesalahan harus diurus di peringkat sistem (hanya jika mungkin). Selepas mengendalikan pengecualian, anda dijamin akan kembali ke aliran program biasa. Tetapi walaupun ralat ditangkap, programmer mungkin tidak tahu bagaimana untuk mengendalikannya di tempat pertama. Tidak seperti pengendalian ralat tradisional, pengecualian membenarkan mengasingkan kod pengendalian ralat dari kod biasa.