subclass ข้อยกเว้นในตัว
ในแพ็คเกจมาตรฐาน java.lang, Java กำหนดคลาสข้อยกเว้นหลายคลาส บางส่วนถูกใช้ในตัวอย่างก่อนหน้า ข้อยกเว้นเหล่านี้โดยทั่วไปจะเป็นคลาสย่อยของคลาสมาตรฐาน RuntimeException เนื่องจาก java.lang ได้รับการแนะนำจริงโดยโปรแกรม Java ทั้งหมดข้อยกเว้นส่วนใหญ่ที่ได้มาจาก RuntimeException จึงมีให้โดยอัตโนมัติ นอกจากนี้พวกเขาไม่จำเป็นต้องรวมอยู่ในรายการการโยนของวิธีการใด ๆ ใน Java สิ่งนี้เรียกว่าข้อยกเว้นที่ไม่ได้ตรวจสอบ เนื่องจากคอมไพเลอร์ไม่ได้ตรวจสอบเพื่อดูว่าวิธีการจัดการหรือโยนข้อยกเว้นเหล่านี้หรือไม่ ข้อยกเว้นที่ไม่ได้ตรวจสอบที่กำหนดไว้ใน java.lang แสดงอยู่ในตารางที่ 1 ตารางที่ 2 แสดงรายการข้อยกเว้นที่ต้องรวมอยู่ในรายการการโยนของวิธีการที่กำหนดโดย java.lang หากวิธีการเหล่านี้สามารถสร้างข้อยกเว้นอย่างใดอย่างหนึ่ง แต่ไม่สามารถจัดการได้ด้วยตัวเอง สิ่งเหล่านี้เรียกว่าข้อยกเว้นที่ตรวจสอบ Java กำหนดประเภทข้อยกเว้นอื่น ๆ ที่เกี่ยวข้องกับคลาสไลบรารีที่แตกต่างกัน
ตารางที่ 1: subclass ข้อยกเว้นที่ไม่ได้ตรวจสอบที่กำหนดไว้ใน java.lang ใน Java
ตารางที่ 2: ตรวจสอบข้อยกเว้นที่กำหนดไว้ใน java.lang
สร้างคลาสย่อยข้อยกเว้นของคุณเองโดยใช้ Java
แม้ว่าข้อยกเว้นในตัวของ Java จะจัดการกับข้อผิดพลาดที่พบบ่อยที่สุด แต่คุณอาจต้องการสร้างประเภทข้อยกเว้นของคุณเองเพื่อจัดการกับกรณีพิเศษที่คุณสมัคร นี่เป็นเรื่องง่ายมาก: เพียงแค่กำหนดคลาสย่อยของข้อยกเว้น (ข้อยกเว้นแน่นอนว่าเป็นคลาสย่อยของการโยนได้) คลาสย่อยของคุณไม่จำเป็นต้องทำอะไรเลย - การปรากฏตัวของพวกเขาในระบบประเภทช่วยให้คุณใช้เป็นข้อยกเว้น
คลาสข้อยกเว้นนั้นไม่ได้กำหนดวิธีใด ๆ แน่นอนว่ามันสืบทอดวิธีการบางอย่างที่ได้รับจากการโยนได้ ดังนั้นข้อยกเว้นทั้งหมดรวมถึงข้อยกเว้นที่คุณสร้างสามารถรับวิธีที่กำหนดได้ วิธีการเหล่านี้แสดงในตารางที่ 3 นอกจากนี้คุณยังสามารถแทนที่วิธีการเหล่านี้อย่างน้อยหนึ่งวิธีในคลาสข้อยกเว้นที่คุณสร้าง
ตารางที่ 3 วิธีการที่กำหนดโดยการโยนได้
ตัวอย่างต่อไปนี้ประกาศคลาสย่อยใหม่ของข้อยกเว้นซึ่งจะใช้เป็นสัญญาณสำหรับข้อผิดพลาดในวิธีการ มันโอเวอร์โหลดเมธอด toString () เพื่อให้คำอธิบายข้อยกเว้นสามารถแสดงด้วย println ()
// โปรแกรมนี้สร้างประเภทข้อยกเว้นที่กำหนดเอง MyException ขยายข้อยกเว้น {รายละเอียด int ส่วนตัว; } class exceptiondemo {void compute แบบคงที่ (int a) โยน myexception {system.out.println ("เรียกว่าการคำนวณ (" + a + ")"); .println ("ทางออกปกติ"); e);}}}
ตัวอย่างนี้กำหนดคลาสย่อยที่มีข้อยกเว้น myexception คลาสย่อยนี้ง่ายมาก: มันมีเพียงคอนสตรัคเตอร์และวิธีการ overloaded toString () ที่แสดงค่าผิดปกติ คลาส ExceptionDemo กำหนดวิธีการคำนวณ () วิธีนี้ส่งวัตถุ MyException ข้อยกเว้นนี้จะเพิ่มขึ้นเมื่อพารามิเตอร์จำนวนเต็มของการคำนวณ () มีขนาดใหญ่กว่า 10
วิธีการหลัก () ตั้งค่าตัวจัดการข้อยกเว้นสำหรับ MyException จากนั้นเรียก compute () ด้วยมูลค่าทางกฎหมายและค่าที่ผิดกฎหมายเพื่อแสดงเส้นทางที่แตกต่างกันของการดำเนินการผ่านรหัส นี่คือผลลัพธ์:
เรียกว่า Compute (1) ExitCalled Compute (20) จับ MyException [20]