ความแตกต่างระหว่างข้อผิดพลาดและข้อยกเว้นใน Java
เนื้อหา
“ Throwable” ทำหน้าที่เป็นรากสำหรับข้อผิดพลาดและลำดับชั้นของ Java “ ข้อผิดพลาด” เป็นเงื่อนไขที่สำคัญที่รหัสของโปรแกรมไม่สามารถจัดการได้ “ ข้อยกเว้น” เป็นสถานการณ์พิเศษที่สามารถจัดการได้โดยรหัสของโปรแกรม ความแตกต่างที่สำคัญระหว่างข้อผิดพลาดและข้อยกเว้นคือ ความผิดพลาด เกิดจากการขาดทรัพยากรระบบและ ข้อยกเว้น เกิดจากรหัสของคุณ ให้เราศึกษาความแตกต่างอื่น ๆ ระหว่างข้อผิดพลาดและข้อยกเว้นพร้อมกับแผนภูมิเปรียบเทียบ
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ความผิดพลาด | ข้อยกเว้น |
---|---|---|
ขั้นพื้นฐาน | ข้อผิดพลาดเกิดจากการขาดทรัพยากรระบบ | มีข้อยกเว้นเกิดขึ้นเนื่องจากรหัส |
การฟื้นตัว | ข้อผิดพลาดไม่สามารถกู้คืนได้ | ข้อยกเว้นสามารถกู้คืนได้ |
คำสำคัญ | ไม่มีวิธีในการจัดการข้อผิดพลาดด้วยรหัสโปรแกรม | จัดการข้อยกเว้นโดยใช้คำหลักสามคำคือ "ลอง", "จับ" และ "โยน" |
ผลที่ตามมา | เมื่อตรวจพบข้อผิดพลาดโปรแกรมจะยุติลงอย่างผิดปกติ | เนื่องจากมีการตรวจพบข้อยกเว้นจะมีการโยนและจับโดยคำหลัก "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
สรุป:
ข้อยกเว้นคือผลลัพธ์ของความผิดพลาดที่เกิดขึ้นในการเขียนโปรแกรมและข้อผิดพลาดเป็นผลมาจากการทำงานที่ไม่เหมาะสมของระบบ