ความแตกต่างระหว่างข้อยกเว้นและข้อผิดพลาด

ความแตกต่างระหว่างข้อยกเว้นและข้อผิดพลาด
ความแตกต่างระหว่างข้อยกเว้นและข้อผิดพลาด

วีดีโอ: ความแตกต่างระหว่างข้อยกเว้นและข้อผิดพลาด

วีดีโอ: ความแตกต่างระหว่างข้อยกเว้นและข้อผิดพลาด
วีดีโอ: [Basic/CCNA] Network Address Translation (NAT) Overview - ทำความเข้าใจเรื่อง NAT กัน 2024, กรกฎาคม
Anonim

ข้อยกเว้นเทียบกับข้อผิดพลาด

พฤติกรรมที่ไม่คาดคิดจะเกิดขึ้นเมื่อโปรแกรมกำลังทำงาน ซึ่งอาจเกิดจากข้อยกเว้นหรือข้อผิดพลาด ข้อยกเว้นคือเหตุการณ์ที่อาจรบกวนการทำงานของโปรแกรมตามปกติ ข้อผิดพลาดเป็นเงื่อนไขที่ถือว่าไม่สามารถกู้คืนได้ ข้อยกเว้นส่วนใหญ่เกี่ยวข้องกับตัวแอปพลิเคชันเอง ในขณะที่ข้อผิดพลาดเกี่ยวข้องกับระบบที่โปรแกรมกำลังทำงานอยู่

ข้อยกเว้นคืออะไร

ข้อยกเว้นคือเหตุการณ์ที่รบกวนการทำงานของโปรแกรมตามปกติ ข้อยกเว้นชื่อมาจาก "เหตุการณ์พิเศษ" การส่งข้อยกเว้นเป็นกระบวนการสร้างอ็อบเจ็กต์ข้อยกเว้นและส่งต่อไปยังระบบรันไทม์วัตถุยกเว้นถูกสร้างขึ้นโดยวิธีการที่เกิดข้อยกเว้น ออบเจ็กต์ข้อยกเว้นมีข้อมูลที่เป็นประโยชน์ เช่น ชนิดและคำอธิบายของข้อยกเว้น เมื่อระบบรันไทม์ได้รับอ็อบเจ็กต์ข้อยกเว้น ระบบจะพยายามหาใครสักคนมาจัดการกับมันภายใน call stack โดยการสำรวจในลำดับย้อนกลับ (ซึ่งวิธีการถูกเรียก) Call stack เป็นรายการที่เรียงลำดับของเมธอด ซึ่งถูกเรียกก่อนเมธอดที่เกิดข้อยกเว้น ระบบรันไทม์จะสำเร็จหากพบวิธีการที่มีตัวจัดการข้อยกเว้น ตัวจัดการข้อยกเว้นคือบล็อกของรหัสที่สามารถจัดการข้อยกเว้นดังกล่าวได้อย่างเป็นทางการ หากระบบรันไทม์พบตัวจัดการที่เหมาะสม (เช่น ประเภทของข้อยกเว้นตรงกับประเภทที่สามารถจัดการได้) ระบบจะส่งอ็อบเจ็กต์ข้อยกเว้นไปยังตัวจัดการ สิ่งนี้เรียกว่าการจับข้อยกเว้น อย่างไรก็ตาม หากไม่สามารถจัดการข้อยกเว้น โปรแกรมจะยุติลง ใน Java ข้อยกเว้นจะสืบทอดมาจาก 'คลาสแบบโยนได้' NullPointerException และ ArrayIndexOutOfBoundsException เป็นข้อยกเว้นทั่วไปสองข้อใน Java

ข้อผิดพลาดคืออะไร

ข้อผิดพลาดคือเงื่อนไขที่ถือว่าไม่สามารถกู้คืนได้ เช่น โปรแกรมที่ต้องการจำนวนหน่วยความจำมากกว่าที่มีอยู่ ไม่สามารถจัดการข้อผิดพลาดเหล่านี้ได้ในขณะใช้งานจริง หากเกิดข้อผิดพลาด โปรแกรมจะยุติการทำงาน ใน Java ข้อผิดพลาดสืบทอดมาจากคลาส Throwable ข้อผิดพลาดมักหมายถึงปัญหาร้ายแรงที่โปรแกรมเมอร์ (หรือแอปพลิเคชัน) ไม่ควรพยายามจับ ข้อผิดพลาดเป็นเพียงสภาวะที่ไม่ปกติ ซึ่งไม่คาดว่าจะเกิดขึ้นภายใต้สถานการณ์ปกติ ดังนั้นจึงไม่เคยคาดคิดมาก่อน ตัวอย่างเช่น OutOfMemoryError, StackOverflowError และ ThreadDead เป็นข้อผิดพลาดดังกล่าว วิธีการไม่ควรมีตัวจัดการข้อผิดพลาด

ข้อยกเว้นและข้อผิดพลาดต่างกันอย่างไร

ทั้งข้อผิดพลาดและข้อยกเว้นเป็นเหตุการณ์ที่ไม่ต้องการระหว่างการทำงานของโปรแกรม อย่างไรก็ตาม พวกเขามีความแตกต่างที่สำคัญ โปรแกรมเมอร์สามารถคาดการณ์ข้อยกเว้นได้ ในขณะที่ข้อผิดพลาดนั้นคาดเดาได้ยากข้อยกเว้นสามารถตรวจสอบหรือยกเลิกการเลือกได้ แต่ข้อผิดพลาดจะไม่ถูกตรวจสอบเสมอ ข้อยกเว้นมักบ่งชี้ถึงข้อผิดพลาดที่เกิดจากโปรแกรมเมอร์ อย่างไรก็ตาม ข้อผิดพลาดเกิดขึ้นเนื่องจากข้อผิดพลาดของระบบหรือการใช้ทรัพยากรอย่างไม่เหมาะสม ดังนั้น ข้อยกเว้นควรจัดการที่ระดับแอปพลิเคชัน ในขณะที่ข้อผิดพลาดควรได้รับการดูแลที่ระดับระบบ (หากเป็นไปได้เท่านั้น) หลังจากจัดการข้อยกเว้น คุณจะรับประกันว่าจะกลับสู่โฟลว์โปรแกรมปกติ แต่ถึงแม้จะจับข้อผิดพลาดได้ แต่โปรแกรมเมอร์อาจไม่ทราบวิธีจัดการกับมันตั้งแต่แรก แตกต่างจากการจัดการข้อผิดพลาดทั่วไป ข้อยกเว้นอนุญาตให้แยกรหัสการจัดการข้อผิดพลาดออกจากรหัสปกติ