“ Throwable” เป็นคลาสพาเรนต์ของข้อผิดพลาดและข้อยกเว้นคลาส คลาส“ RuntimeException” และคลาสย่อยของคลาส“ ข้อผิดพลาด” และคลาสย่อยเป็น“ ข้อยกเว้นที่ไม่ได้ตรวจสอบ” ในขณะที่คลาสย่อยที่เหลือของคลาส“ ข้อยกเว้น” ยกเว้น“ RuntimeException” เป็นข้อยกเว้นที่ตรวจสอบ ความแตกต่างพื้นฐานระหว่างข้อยกเว้นที่ตรวจสอบและไม่ได้ตรวจสอบคือข้อยกเว้นที่ ตรวจสอบ ถูกตรวจสอบโดยคอมไพเลอร์ในขณะที่คอมไพเลอร์ไม่ได้ตรวจ สอบข้อยกเว้นที่ไม่ได้ตรวจสอบ
ให้เราคุยเกี่ยวกับความแตกต่างอื่น ๆ ระหว่างข้อยกเว้นที่เลือกและไม่ถูกตรวจสอบด้วยความช่วยเหลือของแผนภูมิเปรียบเทียบ
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ตรวจสอบข้อยกเว้น | ข้อยกเว้นที่ไม่ได้ตรวจสอบ |
---|---|---|
ขั้นพื้นฐาน | คอมไพเลอร์ตรวจสอบข้อยกเว้นที่ตรวจสอบ | คอมไพเลอร์ไม่ได้ตรวจสอบข้อยกเว้นที่ไม่ได้ตรวจสอบ |
ระดับของข้อยกเว้น | ยกเว้นคลาส "RuntimeException" คลาสลูกทั้งหมดของคลาส "Exception" และคลาส "Error" และคลาสย่อยจะเป็น Checked Exception | คลาส "RuntimeException" และคลาสย่อยเป็น "Unchecked Exceptions" |
การจัดการ | ถ้าเราไม่จัดการกับข้อยกเว้นที่ตรวจสอบแล้ววัตถุคอมไพเลอร์ | แม้ว่าเราจะไม่จัดการกับข้อยกเว้นที่ไม่ได้ตรวจสอบ แต่คอมไพเลอร์ก็ไม่คัดค้าน |
การรวบรวม | โปรแกรมไม่ได้รวบรวมหากมีข้อยกเว้นที่ตรวจสอบไม่ได้จัดการในรหัสโปรแกรม | โปรแกรมคอมไพล์ได้สำเร็จแม้ว่าจะมีข้อยกเว้นที่ไม่ได้ตรวจสอบในโค้ดโปรแกรม |
คำจำกัดความของการตรวจสอบข้อยกเว้น
ข้อยกเว้นที่ตรวจสอบคือข้อยกเว้นที่ตรวจสอบโดยคอมไพเลอร์สำหรับการดำเนินการที่ราบรื่นของโปรแกรม คอมไพเลอร์ตรวจสอบว่าโปรแกรมสามารถจัดการกับข้อยกเว้นที่ตรวจสอบหรือไม่ หากรหัสไม่สามารถจัดการกับข้อยกเว้นจะเกิดข้อผิดพลาดในการรวบรวม คลาสย่อยทั้งหมดของคลาส“ Exception” ยกเว้นคลาส RuntimeException เป็นข้อยกเว้นที่ตรวจสอบ
ให้เราศึกษาข้อยกเว้นที่ตรวจสอบด้วยตัวอย่าง
นำเข้า java.io. *; ตัวอย่างคลาส {โมฆะคงที่สาธารณะหลัก (String args []) {FileInputStream fis = null; fis = new FileInputStream ("B: /myfile.txt"); // ตัวสร้างนี้ FileInputStream (ชื่อไฟล์ไฟล์) จะโยน FileNotFoundException ซึ่งเป็นข้อยกเว้นที่เลือก int k; ในขณะที่ ((k = fis.read ())! = -1) {// วิธีอ่าน () ของคลาส FileInputStream จะส่งข้อยกเว้นที่เลือกไว้: IOException ระบบออก ((ถ่าน) k); } fis.close (); // เมธอด close () ปิดสตรีมอินพุตไฟล์ที่มันพ่น IOException }}
ในโค้ดด้านบนเราพยายามเปิดอ่านและแสดงเนื้อหาไฟล์ อาจเกิดขึ้นว่าไฟล์ไม่มีอยู่จากนั้น FileNotFoundException จะเกิดขึ้นซึ่งเป็นข้อยกเว้นที่ตรวจสอบ หากไม่มีการจัดการข้อยกเว้นที่ตรวจสอบแล้วคอมไพเลอร์จะไม่อนุญาตให้โปรแกรมรวบรวมข้อมูลได้อย่างราบรื่น มันจะแสดงข้อผิดพลาดเวลารวบรวม ดังนั้นสำหรับการรวบรวมที่ราบรื่นข้อยกเว้นที่เลือกจะต้องถูกจับหรือประกาศว่าถูกโยนทิ้ง
คำจำกัดความของข้อยกเว้นที่ไม่ได้ตรวจสอบ
Unchecked Exceptions เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบโดยคอมไพเลอร์ คอมไพเลอร์คอมไพล์โปรแกรมสำเร็จแม้ว่าข้อยกเว้นจะไม่ได้รับการจัดการโดยรหัส คลาส“ ข้อผิดพลาด” และคลาสลูก, คลาส“ รันไทม์” และคลาสย่อยเป็นข้อยกเว้นที่ไม่ถูกตรวจสอบ
ให้เราดูตัวอย่างของข้อยกเว้นที่ไม่ได้ตรวจสอบ
ตัวอย่างคลาส {โมฆะสาธารณะคงที่หลัก (String args []) {int arr [] = {1, 2, 3, 4, 5} System.out.println (ARR [7]); // ArrayIndexOutOfBoundsException }}
ในโค้ดข้างต้นคุณจะเห็นว่ามี ArrayIndexOutOfBoundsException เนื่องจากฉันพยายามเข้าถึงองค์ประกอบที่ไม่มีอยู่ เนื่องจากนี่เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบข้อผิดพลาดในการรวบรวมเวลาจะไม่เกิดขึ้นและไฟล์จะถูกรวบรวมโดยไม่มีข้อผิดพลาดใด ๆ แต่โปรแกรมจะไม่ทำงานจนกว่าข้อยกเว้นจะได้รับการจัดการ ดังนั้นสำหรับการดำเนินการที่ราบรื่นข้อยกเว้นจะต้องถูกจับหรือประกาศว่าจะถูกโยน
ความแตกต่างที่สำคัญระหว่างข้อยกเว้น Checked และ Unchecked
- ข้อยกเว้นที่ตรวจสอบอยู่ในความรู้ของคอมไพเลอร์ในขณะที่ข้อยกเว้นที่ตรวจสอบไม่ได้อยู่ในความรู้ของคอมไพเลอร์
- ยกเว้นคลาส RuntimeException และ Error คลาสทั้งหมดจะถูกตรวจสอบข้อยกเว้น ในทางกลับกันคลาส RuntimeException และข้อผิดพลาดจะไม่ถูกตรวจสอบข้อยกเว้น
- หากข้อยกเว้นที่ตรวจสอบไม่ได้รับการจัดการโดยรหัสแล้ววัตถุรวบรวม ในทางกลับกันถ้าเราไม่จัดการกับข้อยกเว้นที่ไม่ได้ตรวจสอบในรหัสคอมไพเลอร์จะไม่คัดค้าน
- หากตรวจสอบข้อยกเว้นที่เกิดขึ้นในรหัสรหัสจะไม่รวบรวมในขณะที่แม้ว่าข้อยกเว้นไม่ได้ตรวจสอบจะไม่ได้รับการจัดการโดยรหัสที่รวบรวมยังรวบรวมรหัส
บันทึก :
ทั้งข้อยกเว้นที่ถูกตรวจสอบหรือไม่ถูกตรวจสอบเกิดขึ้นในระหว่างการรันไทม์ พวกเขาจะถูกตรวจสอบหรือไม่ถูกตรวจสอบโดยรวบรวมในช่วงเวลารวบรวม
สรุป:
ทั้งข้อยกเว้นที่ตรวจสอบและไม่ถูกตรวจสอบจะต้องได้รับการจัดการเพื่อดำเนินการโปรแกรมอย่างราบรื่น