“สวัสดี อามีโก้!”

"สวัสดีเอลลี่! ชีวิตเป็นอย่างไรบ้าง"

"ยอดเยี่ยม ขอบคุณ คุณเป็นอย่างไรบ้าง"

"เยี่ยมมาก เช้านี้มีเรื่องใหม่ๆ มากมายที่อธิบายให้ฉันฟัง"

“อืม ดีมาก ไม่เหนื่อยเหรอ?”

“ใช่ นั่นสิ ฉันเหนื่อยนิดหน่อย”

"ถ้าอย่างนั้นคุณก็โชคดี วันนี้ฉันอยากจะครอบคลุมหัวข้อใหญ่และซับซ้อน แต่ในนาทีสุดท้าย ฉันเปลี่ยนใจและตัดสินใจที่จะครอบคลุมหัวข้อเล็กๆ ง่ายๆ"

"เล็กและง่าย ฉันพร้อมแล้ว"

"วันนี้เราจะตรวจสอบหัวข้อข้อยกเว้นโดยละเอียด"

"คุณกำลังพูดถึงการจัดการข้อผิดพลาด?"

"คุณไม่ควรคิดว่าข้อยกเว้นเป็นข้อผิดพลาด ข้อยกเว้นเป็นเหมือนรายงานที่แจ้งว่า 'มีบางอย่างที่ไม่คาดคิดเกิดขึ้น' จากรายงานเหล่านี้ คุณสามารถเสนอการดำเนินการทางเลือกได้"

"มันคือทั้งหมดที่เกี่ยวกับเมธอด  เมื่อคุณเรียกใช้เมธอด มันสัญญาว่าจะทำในสิ่งที่ถูกเรียกให้ทำ "

"เมื่อเมธอดไม่สามารถทำในสิ่งที่ถูกเรียกให้ทำไม่ว่าจะด้วยเหตุผลใดก็ตาม จะต้องแจ้งให้ผู้เรียกทราบ"

"กล่าวอีกนัยหนึ่งสิ่งที่เลวร้ายที่สุดที่อาจเกิดขึ้นคือวิธีการไม่ทำงานและไม่บอกใครเกี่ยวกับเรื่องนี้ ไม่มีอะไรจะเลวร้ายไปกว่านี้แล้ว คุณจะสูญเสียการควบคุมสถานการณ์เมื่อสิ่งนั้นเกิดขึ้น "

"เมื่อคุณเป็นโปรแกรมเมอร์หน้าใหม่ ดูเหมือนว่าคุณเพียงแค่เรียกใช้เมธอด และพวกเขาจะแน่ใจว่าจะทำสิ่งที่คุณขอให้ทำ"

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

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

"ดังนั้นการที่โปรแกรมแสดงสิ่งผิดปกติอาจแย่กว่าการที่โปรแกรมปิดและสูญเสียข้อมูลทั้งหมด?"

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

"เมื่อโปรแกรมเมอร์มือใหม่เจอข้อยกเว้น เขาจะหงุดหงิด"

"แต่ในความเป็นจริง ข้อยกเว้นเปิดเผยสถานการณ์ที่เป็นไปได้ทั้งหมดที่เขาควรจะรู้ล่วงหน้า แต่ไม่ได้ทำ"

"คุณสามารถเลือกที่จะไม่จัดการข้อยกเว้นและนั่นจะทำให้คุณเป็นโปรแกรมเมอร์ที่ไม่ดี แต่ถ้าวิธีการของคุณไม่มีข้อยกเว้น แสดงว่าคุณไม่ใช่โปรแกรมเมอร์เลย เพราะคุณไม่เข้าใจความจริงง่ายๆ นี้:"

"เมธอดทำในสิ่งที่เขียนไว้ให้ทำ หรือไม่ก็สร้างข้อยกเว้น ไม่มีตัวเลือกที่สาม!"

“โอเค ฉันเชื่อคุณ ฉันสัญญาว่าจะใช้ข้อยกเว้น”

"เยี่ยมมาก ถ้าอย่างนั้นฉันจะบอกคุณเกี่ยวกับลำดับชั้นของข้อยกเว้น:"

ลำดับชั้นข้อยกเว้น ข้อผิดพลาด - 1

"ลำดับชั้นข้อยกเว้นขึ้นอยู่กับสี่คลาส"

"คลาสพื้นฐานที่ต่ำที่สุดคือThrowable "

" คลาส ข้อผิดพลาดและข้อยกเว้นสืบทอดมา"

" RuntimeExceptionสืบทอดข้อยกเว้น "

" คลาส Errorเป็นคลาสพื้นฐานสำหรับข้อผิดพลาด JVM เช่นStackOverFlow , OutOfMemory , …"

"โปรแกรมมักจะไม่สามารถกู้คืนจากข้อผิดพลาดดังกล่าว ซึ่งนำไปสู่การยุติ"

"แท้จริงแล้ว จะทำอย่างไรหากมีหน่วยความจำไม่เพียงพอให้โปรแกรมทำงานต่อไปได้ตามปกติ หรือมีสแต็กโอเวอร์โฟลว์"

" ข้อยกเว้นคือคลาสพื้นฐานสำหรับข้อยกเว้นทั่วไปทั้งหมดที่เกิดขึ้นจากโปรแกรม  RuntimeExceptionเป็นข้อยกเว้น ชนิดพิเศษ ที่มีกฎแตกต่างกันเล็กน้อย"

"พวกเขาคืออะไร?"

“นั่นคือสิ่งที่ฉันจะอธิบายตอนนี้”

"อย่างที่คุณคงจำได้ ข้อยกเว้นแบ่งออกเป็น 2 ประเภท ได้แก่การตรวจสอบและยกเลิกการเลือก "

"หากเมธอดส่ง ข้อยกเว้น ที่ตรวจสอบแล้ว เมธอดที่เรียกใช้จะต้องตัดการโทรนั้นใน บล็อก try-catchอย่างนั้น หรือโยนข้อยกเว้นใหม่ (ให้กับผู้เรียก) โดยระบุการโยน อย่างชัดเจน ในลายเซ็นเมธอด"

"กฎ/ข้อจำกัดเหล่านี้ใช้ไม่ได้กับข้อยกเว้นที่ไม่ได้ตรวจสอบ"

"ดังนั้น ข้อยกเว้นทั้งหมดที่สืบทอดมาจึงถือว่ามีการตรวจสอบ ยกเว้นข้อยกเว้นที่สืบทอด RuntimeException ซึ่งถือว่าไม่ได้เลือก"

"เอ่อ-ฮะ ฉันจำได้ว่าคุณเคยบอกอะไรแบบนี้กับฉันก่อนหน้านี้"

"Amigo! พวกเขาถามเกี่ยวกับลำดับชั้นข้อยกเว้นในการสัมภาษณ์ทุกครั้งฉันจะพูดอีกครั้ง - ทุกๆ การสัมภาษณ์คุณจำเป็นต้องรู้หัวข้อนี้อย่างถ่องแท้"

“ตกลง ฉันจะอ่านทุกอย่างอีกครั้งและคิดออก ขอบคุณที่ช่วยฉัน เอลลี่”