คลาส Throwable คืออะไร? คลาส Throwable เป็นคลาสสุดยอดของข้อผิดพลาดหรือข้อยกเว้นทั้งหมดในภาษา Java มันเป็นคลาสทั่วไปที่รวมข้อยกเว้นทั้งหมดเข้าด้วยกัน
คลาส Error เป็นคลาสย่อยของคลาส Throwable รวมถึงข้อยกเว้นของระบบ ข้อยกเว้นของเครื่องเสมือน และปัญหาอื่น ๆ ที่ผู้ใช้ไม่สามารถป้องกันได้
คลาส Exception ยังเป็นคลาสย่อยของคลาส Throwable อีกด้วย มันเป็นข้อยกเว้นที่ตัวโปรแกรมสามารถจัดการได้ โดยแบ่งออกเป็นข้อยกเว้นรันไทม์ (เลือกไว้) และข้อยกเว้นที่ไม่ใช่รันไทม์ (ไม่เลือก) ข้อยกเว้นรันไทม์อาจได้รับการจัดการหรือไม่ก็ได้ จะต้องจัดการข้อยกเว้นที่ไม่ใช่รันไทม์
ข้อยกเว้นรันไทม์เป็นข้อยกเว้นทั้งหมด ของคลาส RuntimeException และคลาสย่อย เช่น NullPointerException, IndexOutOfBoundsException เป็นต้น ข้อยกเว้นเหล่านี้จะไม่ถูกเลือกและสามารถบันทึกหรือไม่ประมวลผลในโปรแกรมได้ โดยทั่วไปข้อยกเว้นเหล่านี้มีสาเหตุจากข้อผิดพลาดลอจิกของโปรแกรม และโปรแกรมควรพยายามหลีกเลี่ยงการเกิดข้อยกเว้นดังกล่าวจากมุมมองเชิงตรรกะ
เมื่อ RuntimeException เกิดขึ้น เราไม่จำเป็นต้องจัดการมัน และเครื่องเสมือนมักจะเข้ามาแทนที่
หลังจากเกิดข้อยกเว้นรันไทม์ หากไม่พบและประมวลผลข้อยกเว้น (นั่นคือ ไม่มีการจับ) ระบบจะส่งข้อยกเว้นไปยังเลเยอร์ด้านบนสุด หากเป็นแบบมัลติเธรด ระบบจะส่งข้อยกเว้นออกไป Thread.run() ถ้าเป็นแบบ single-thread มันจะถูก Throw โดย Thread.run() หลังจากโยนแล้ว ถ้าเป็นด้าย ด้ายก็จะออก หากโปรแกรมหลักส่งข้อยกเว้น โปรแกรมทั้งหมดจะออก ข้อยกเว้นรันไทม์เป็นคลาสย่อยของคลาส Exception และยังมีคุณลักษณะของข้อยกเว้นทั่วไปด้วย กล่าวคือ สามารถจัดการได้โดยบล็อก catch เพียงแต่ว่าเรามักจะไม่จัดการมัน กล่าวคือ ถ้าคุณไม่จัดการข้อยกเว้นรันไทม์ หลังจากเกิดข้อยกเว้นรันไทม์ เธรดก็จะยุติลงหรือโปรแกรมหลักก็จะยุติลง
หากคุณไม่ต้องการยุติ คุณต้องจับข้อยกเว้นรันไทม์ทั้งหมด และอย่าปล่อยให้เธรดการประมวลผลนี้ออกจากการทำงาน หากข้อมูลผิดปกติปรากฏในคิว การประมวลผลปกติควรละทิ้งข้อมูลที่ผิดปกติแล้วจึงบันทึกบันทึก การมีอยู่ของข้อมูลที่ผิดปกติไม่ควรส่งผลกระทบต่อการประมวลผลข้อมูลปกติในภายหลัง
ข้อยกเว้นที่ไม่ใช่รันไทม์เป็นข้อยกเว้นอื่นที่ไม่ใช่ RuntimeException และทั้งหมดอยู่ในคลาส Exception และคลาสย่อย ตัวอย่างเช่น: IOException, SQLException ฯลฯ และข้อยกเว้นที่ผู้ใช้กำหนด สำหรับข้อยกเว้นประเภทนี้ คอมไพเลอร์ Java บังคับให้เราจับและจัดการข้อยกเว้นเหล่านี้ มิฉะนั้น โปรแกรมจะไม่ถูกคอมไพล์ ดังนั้นเมื่อเผชิญกับข้อยกเว้นประเภทนี้ ไม่ว่าเราจะชอบหรือไม่ก็ตาม เราจะต้องเขียน catch block จำนวนมากเพื่อจัดการกับข้อยกเว้นที่เป็นไปได้