แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ความผิดพลาด | ข้อยกเว้น |
---|---|---|
ขั้นพื้นฐาน | ข้อผิดพลาดเกิดจากการขาดทรัพยากรระบบ | มีข้อยกเว้นเกิดขึ้นเนื่องจากรหัส |
การฟื้นตัว | ข้อผิดพลาดไม่สามารถกู้คืนได้ | ข้อยกเว้นสามารถกู้คืนได้ |
คำสำคัญ | ไม่มีวิธีการจัดการข้อผิดพลาดด้วยรหัสโปรแกรม | จัดการข้อยกเว้นโดยใช้คำหลักสามคำคือ "ลอง", "จับ" และ "โยน" |
ผลที่ตามมา | เมื่อตรวจพบข้อผิดพลาดโปรแกรมจะหยุดทำงานผิดปกติ | เนื่องจากมีการตรวจพบข้อยกเว้นจะถูกโยนและจับโดยคำหลัก "throw" และ "catch" ตามลำดับ |
ประเภท | ข้อผิดพลาดถูกจัดประเภทเป็นประเภทไม่ถูกตรวจสอบ | ข้อยกเว้นถูกจัดประเภทเป็นแบบตรวจสอบหรือไม่ถูกตรวจสอบ |
บรรจุภัณฑ์ | ใน Java ข้อผิดพลาดจะถูกกำหนดแพ็คเกจ "java.lang.Error" | ใน Java ข้อยกเว้นจะถูกกำหนดใน "java.lang.Exception" |
ตัวอย่าง | OutOfMemory, StackOverFlow | การตรวจสอบข้อยกเว้น: NoSuchMethod, ClassNotFound ข้อยกเว้นที่ไม่ได้ตรวจสอบ: NullPointer, IndexOutOfBounds |
คำจำกัดความของข้อผิดพลาด
“ ข้อผิดพลาด ” เป็นคลาสย่อยของคลาส“ Throwable” ในตัว ข้อผิดพลาดเป็นเงื่อนไขที่สำคัญที่เกิดขึ้นเนื่องจากการขาดทรัพยากรระบบและไม่สามารถจัดการได้โดยรหัสของโปรแกรม ข้อผิดพลาดไม่สามารถกู้คืนได้ด้วยวิธีการใด ๆ เพราะไม่สามารถสร้างโยนจับหรือตอบกลับได้ ข้อผิดพลาดเกิดจากความล้มเหลวจากภัยพิบัติซึ่งโดยปกติโปรแกรมของคุณไม่สามารถจัดการได้
ข้อผิดพลาดเป็นประเภทที่ไม่ถูกตรวจสอบเสมอเนื่องจากคอมไพเลอร์ไม่มีความรู้เกี่ยวกับการเกิดขึ้น ข้อผิดพลาดมักจะเกิดขึ้นในสภาพแวดล้อมรันไทม์ ข้อผิดพลาดสามารถอธิบายได้ด้วยความช่วยเหลือของตัวอย่างโปรแกรมมีข้อผิดพลาดของสแต็คล้นหน่วยความจำผิดพลาดหรือข้อผิดพลาดของระบบผิดพลาดข้อผิดพลาดชนิดนี้เกิดจากระบบ รหัสจะไม่รับผิดชอบต่อข้อผิดพลาดดังกล่าว ผลที่ตามมาของการเกิดข้อผิดพลาดคือโปรแกรมได้รับการยกเลิกอย่างผิดปกติ
นิยามของข้อยกเว้น
“ ข้อยกเว้น” ยังเป็นคลาสย่อยของคลาส“ Throwable” ในตัว ข้อยกเว้นคือเงื่อนไขพิเศษที่เกิดขึ้นในสภาพแวดล้อมรันไทม์ ข้อยกเว้นส่วนใหญ่เกิดขึ้นเนื่องจากรหัสของโปรแกรมของเรา แต่ข้อยกเว้นสามารถจัดการได้โดยตัวโปรแกรมเองเนื่องจากข้อยกเว้นสามารถกู้คืนได้ จัดการข้อยกเว้นโดยใช้คำหลักสามคำคือ“ ลอง”, “ จับ”, “ โยน” ไวยากรณ์ของการเขียนข้อยกเว้นคือ:
ลอง {// เขียนโค้ดของคุณที่นี่} จับ (ประเภทการยกเว้น) {// เขียนรหัสของคุณที่นี่}
ในโค้ดด้านบนรหัสที่เขียนในบล็อกลองเป็นรหัสที่คุณต้องการตรวจสอบเพื่อดูข้อยกเว้น หากข้อยกเว้นเกิดขึ้นในบล็อกลองจะถูกโยนโดยใช้คำหลัก“ โยน” ข้อยกเว้นที่เกิดขึ้นสามารถถูกจับได้โดยบล็อก“ catch” ของโค้ดด้านบน “ ประเภทการยกเว้น” เป็นประเภทของข้อยกเว้นที่เกิดขึ้น
ในคำง่ายๆเราสามารถพูดได้ว่าข้อผิดพลาดที่เกิดขึ้นเนื่องจากรหัสที่ไม่เหมาะสมเรียกว่าข้อยกเว้น ตัวอย่างเช่นถ้าไม่พบคลาสที่ร้องขอหรือไม่พบวิธีที่ร้องขอ ข้อยกเว้นประเภทนี้เกิดจากรหัสในโปรแกรม ระบบจะไม่รับผิดชอบสำหรับข้อยกเว้นประเภทนี้ ข้อยกเว้นถูกจัดประเภทเป็น "ถูกตรวจสอบ" และ "ไม่ถูกตรวจสอบ" ข้อยกเว้นที่ไม่ได้ตรวจสอบไม่ได้อยู่ในความรู้ของคอมไพเลอร์ที่เกิดขึ้นระหว่างรันไทม์ในขณะที่คอมไพเลอร์มีความรู้เกี่ยวกับข้อยกเว้นตรวจสอบตามที่พวกเขาเป็นที่รู้จักกันในการรวบรวมในช่วงเวลารวบรวม
ความแตกต่างที่สำคัญในข้อผิดพลาดและข้อยกเว้น
- ข้อผิดพลาดเกิดขึ้นเฉพาะเมื่อทรัพยากรระบบขาดในขณะที่เกิดข้อยกเว้นถ้ารหัสมีปัญหาบางอย่าง
- ข้อผิดพลาดจะไม่สามารถกู้คืนได้ในขณะที่ข้อยกเว้นสามารถกู้คืนได้โดยการเตรียมรหัสเพื่อจัดการข้อยกเว้น
- ข้อผิดพลาดจะไม่สามารถจัดการได้ แต่ข้อยกเว้นสามารถจัดการได้โดยรหัสถ้ารหัสการขว้างข้อยกเว้นนั้นเขียนไว้ในบล็อก try และ catch
- หากมีข้อผิดพลาดเกิดขึ้นโปรแกรมจะถูกยกเลิกอย่างผิดปกติ ในทางกลับกันหากข้อยกเว้นเกิดขึ้นโปรแกรมจะส่งข้อยกเว้นและจะจัดการโดยใช้บล็อก try และ catch
- ข้อผิดพลาดเป็นประเภทที่ไม่ถูกตรวจสอบเช่นข้อผิดพลาดไม่ได้อยู่ในความรู้ของคอมไพเลอร์ในขณะที่ข้อยกเว้นจะถูกจัดประเภทเป็นตรวจสอบและไม่ถูกตรวจสอบ
- ข้อผิดพลาดถูกกำหนดไว้ในแพ็คเกจ java.lang.Error ขณะที่ข้อยกเว้นถูกกำหนดไว้ java.lang.Exception
สรุป:
ข้อยกเว้นคือผลลัพธ์ของข้อผิดพลาดที่ทำในการเขียนโปรแกรมและข้อผิดพลาดเป็นผลมาจากการทำงานที่ไม่เหมาะสมของระบบ