ตรวจสอบข้อยกเว้นเทียบกับข้อยกเว้นรันไทม์
ข้อยกเว้นเป็นกิจกรรมประเภทพิเศษ ซึ่งสามารถรบกวนการทำงานของโปรแกรมตามปกติได้ ข้อยกเว้นชื่อมาจาก "เหตุการณ์พิเศษ" การส่งข้อยกเว้นเป็นกระบวนการสร้างอ็อบเจ็กต์ข้อยกเว้นและส่งต่อไปยังระบบรันไทม์ เมื่อระบบรันไทม์ได้รับอ็อบเจ็กต์ข้อยกเว้น ระบบจะพยายามหาใครสักคนมาจัดการกับมันภายใน call stack โดยการสำรวจในลำดับที่กลับกัน (ซึ่งวิธีการถูกเรียก) ระบบรันไทม์จะสำเร็จหากพบเมธอดที่มีตัวจัดการข้อยกเว้น ตัวจัดการข้อยกเว้นคือบล็อกของรหัสที่สามารถจัดการข้อยกเว้นดังกล่าวได้อย่างเป็นทางการหากระบบรันไทม์พบตัวจัดการที่เหมาะสม ระบบจะส่งอ็อบเจ็กต์ข้อยกเว้นไปยังตัวจัดการ สิ่งนี้เรียกว่าการจับข้อยกเว้น อย่างไรก็ตาม หากไม่สามารถจัดการข้อยกเว้น โปรแกรมจะยุติลง ใน Java ข้อยกเว้นสืบทอดจากคลาส Throwable Checked Exceptions เป็นข้อยกเว้นที่คอมไพเลอร์บังคับใช้การจัดการ ข้อยกเว้นรันไทม์เป็นข้อยกเว้นประเภทหนึ่ง ซึ่งคอมไพเลอร์ไม่ได้ตรวจสอบ
เช็คข้อยกเว้นคืออะไร
Checked Exceptions เป็นอ็อบเจ็กต์ของคลาส java.lang.exception หรือคลาสย่อย (ยกเว้น java.lang. RuntimeException และคลาสย่อย) ข้อยกเว้นที่ตรวจสอบจะถูก "ตรวจสอบ" ณ เวลารวบรวม นั่นหมายความว่าโปรแกรมเมอร์ต้องจับหรือโยนข้อยกเว้นเหล่านี้ มิฉะนั้นคอมไพล์จะบ่น (ทำให้เกิดข้อผิดพลาดของคอมไพเลอร์) ด้วยเหตุนี้ โปรแกรมเมอร์จึงทราบข้อยกเว้นที่ตรวจสอบหลายรายการเป็นอย่างดี ตัวอย่างเช่น IOException และคลาสย่อยของมันถูกตรวจสอบข้อยกเว้น และเมื่อใดก็ตามที่โปรแกรมเมอร์จัดการกับการเข้าถึงหรือแก้ไขไฟล์ คอมไพเลอร์จะตรวจสอบเพื่อให้แน่ใจว่า IOExceptions ที่เป็นไปได้ทั้งหมดได้รับการดูแลโดยโปรแกรมเมอร์
ข้อยกเว้นรันไทม์คืออะไร
Runtime Exceptions ประกอบด้วย java.lang. RuntimeException และคลาสย่อยทั้งหมด ในทางทฤษฎี พวกมันมีจุดประสงค์เดียวกันกับข้อยกเว้นที่ตรวจสอบ และสามารถโยนหรือจัดการได้เหมือนข้อยกเว้นที่ตรวจสอบ แต่คอมไพเลอร์ไม่ได้บังคับใช้การจัดการสิ่งเหล่านี้ ดังนั้น ข้อยกเว้นรันไทม์จึงอยู่ในกลุ่มข้อยกเว้นที่ไม่ได้ตรวจสอบ NullPointerException, NumberFormatEception, ClassCastException และ ArrayIndexOutOfBoundsException เป็นข้อยกเว้นรันไทม์ทั่วไปใน Java
Checked Exception และ Runtime Exception ต่างกันอย่างไร
ทั้งที่ตรวจสอบข้อยกเว้นและข้อยกเว้นรันไทม์เป็นเหตุการณ์ที่ไม่ต้องการระหว่างการดำเนินการของโปรแกรม แต่ก็มีความแตกต่างกัน การจัดการข้อยกเว้นที่ตรวจสอบถูกบังคับใช้โดยคอมไพเลอร์ แต่ข้อยกเว้นรันไทม์ไม่ได้บังคับ ดังนั้น ต้องส่งหรือจัดการข้อยกเว้นที่ตรวจสอบเพื่อให้โค้ดคอมไพล์ แต่ไม่มีข้อกำหนดดังกล่าวเกี่ยวกับข้อยกเว้นรันไทม์ดังนั้น ข้อยกเว้นรันไทม์จึงอยู่ในหมวดหมู่ข้อยกเว้นที่ไม่ได้ตรวจสอบพร้อมกับข้อผิดพลาด
ข้อเสียที่มีการตรวจสอบข้อยกเว้นคือโปรแกรมเมอร์ต้องจัดการกับมันแม้ว่าเธอจะไม่รู้ว่าต้องทำอย่างไร ดังนั้น หากโปรแกรมเมอร์เพิ่งส่งข้อยกเว้นใหม่โดยไม่ปิดต้นฉบับ การติดตามสแต็กที่เป็นของข้อยกเว้นดั้งเดิมจะสูญหายไป นี่คือจุดที่ข้อยกเว้นรันไทม์มีประโยชน์ เนื่องจากข้อยกเว้นรันไทม์ทั้งหมดสามารถจัดการได้ในที่เดียว ดังนั้นโปรแกรมเมอร์จึงสามารถเขียนโค้ดได้น้อยลง ในทางกลับกัน เนื่องจากต้องตรวจจับข้อยกเว้นที่ตรวจสอบได้ จึงไม่น่าแปลกใจสำหรับโปรแกรมเมอร์ เธอจะทราบเสมอว่าข้อยกเว้นที่ตรวจสอบใดที่สามารถส่งได้ด้วยวิธีการบางอย่าง ตรงกันข้ามกับสิ่งนี้ ข้อยกเว้นรันไทม์ต่างๆ อาจถูกโยนออกไปโดยที่โปรแกรมเมอร์ไม่รู้