รหัส Java ใด ๆ สามารถโยนข้อยกเว้นเช่น: รหัสที่เขียนด้วยตัวเองรหัสจากแพ็คเกจการพัฒนา Java หรือระบบรันไทม์ Java ไม่ว่าจะเป็นใครคุณสามารถโยนข้อยกเว้นผ่านคำสั่ง Java Throw ข้อยกเว้นใด ๆ ที่โยนจากวิธีการจะต้องใช้กับประโยคการโยน
1. โยนข้อยกเว้น
หากวิธีการอาจมีข้อยกเว้น แต่ไม่มีความสามารถในการจัดการข้อยกเว้นดังกล่าวคุณสามารถใช้ประโยคการโยนเพื่อประกาศข้อยกเว้นที่ถูกโยนลงในการประกาศวิธีการ ตัวอย่างเช่นรถอาจล้มเหลวเมื่อทำงานและรถเองไม่สามารถจัดการกับความล้มเหลวนี้ได้ดังนั้นให้คนขับจัดการกับมัน
คำสั่ง THROWS ใช้เพื่อประกาศประเภทของข้อยกเว้นที่จะโยนเมื่อมีการกำหนดวิธีการ ข้อยกเว้นหลายข้อสามารถแยกได้โดยใช้เครื่องหมายจุลภาค รูปแบบไวยากรณ์ของคำสั่งโยนคือ:
MethodName พ่นข้อยกเว้น 1, Exception2, .. , ExceptionN
-
-
โยนหลังจากชื่อวิธีการยกเว้น 1, Exception2, …, ExceptionN เป็นรายการของข้อยกเว้นที่จะโยน เมื่อวิธีการส่งรายการข้อยกเว้นวิธีการจะไม่จัดการข้อยกเว้นของประเภทเหล่านี้และประเภท subclass ของพวกเขา แต่จะถูกโยนลงไปในวิธีที่เรียกวิธีการและจะได้รับการจัดการ ตัวอย่างเช่น:
นำเข้า java.lang.exception; (สตริง [] args) {// วิธีการหลักลอง {// ลองใช้คำสั่งจัดการข้อมูลข้อยกเว้นป๊อป (); THROWN EXCAMENT "); // ข้อมูลข้อยกเว้นเอาต์พุต}}}
หลังจากโยนข้อยกเว้นไปยังผู้โทรโดยใช้คำหลักพุ่มหากผู้โทรไม่ต้องการจัดการข้อยกเว้นคุณสามารถโยนมันต่อไปได้ แต่ในที่สุดก็ต้องมีผู้โทรที่สามารถจัดการข้อยกเว้นได้
วิธีการป๊อปไม่ได้จัดการกับข้อยกเว้น negativearraysizeException แต่ได้รับการจัดการโดยฟังก์ชั่นหลัก
กฎสำหรับการขว้างเพื่อโยนข้อยกเว้น:
1) หากเป็นข้อยกเว้นที่ไม่ได้ตรวจสอบนั่นคือข้อผิดพลาด, runtimeException หรือ subclasses ของพวกเขาคุณสามารถประกาศข้อยกเว้นที่จะโยนโดยไม่ต้องใช้คำหลัก throws และการรวบรวมจะยังคงผ่านไปอย่างราบรื่น รันไทม์
2) ต้องมีการประกาศข้อยกเว้นใด ๆ ที่สามารถโยนได้โดยวิธีการ นั่นคือหากวิธีการอาจมีข้อยกเว้นที่ตรวจสอบได้มันจะถูกจับด้วยคำสั่งลองจับหรือประกาศด้วยประโยคการโยนมิฉะนั้นจะทำให้เกิดข้อผิดพลาดในการรวบรวม
3) เฉพาะเมื่อมีการโยนข้อยกเว้นผู้โทรของวิธีการจะต้องจัดการหรือโยนข้อยกเว้นอีกครั้ง เมื่อผู้เรียกวิธีการไม่สามารถจัดการกับข้อยกเว้นได้ควรโยนมันต่อไปแทนที่จะกลืนมันทั้งหมด
4) วิธีการโทรจะต้องปฏิบัติตามกฎการจัดการข้อยกเว้นและการประกาศใด ๆ หากวิธีการถูกเขียนทับจะไม่สามารถประกาศข้อยกเว้นที่แตกต่างจากวิธีที่เขียนทับได้ ข้อยกเว้นใด ๆ ที่ประกาศจะต้องเป็นคลาสที่คล้ายกันหรือ subclass ของข้อยกเว้นที่ประกาศโดยวิธีการแทนที่
ตัวอย่างเช่น:
พื้นฐานสำหรับการพิจารณาว่าข้อยกเว้นอาจเกิดขึ้นในวิธีการดังนี้:
1) มีคำสั่งโยนในวิธีการ ตัวอย่างเช่นบล็อก Catch Code ของวิธีการข้างต้น 7 () มีคำสั่งการโยน
2) วิธีการอื่น ๆ ถูกเรียกและวิธีการอื่น ๆ ใช้ประโยคโยนเพื่อประกาศข้อยกเว้นบางอย่างที่จะโยน ตัวอย่างเช่นวิธีการ Method3 () เรียกใช้เมธอด 1 () วิธีการและวิธีการที่ 1 () ประกาศว่าการโยน iOException ถูกโยนลงดังนั้น iOException อาจเกิดขึ้นในวิธี Method3 ()
2. ใช้การโยนเพื่อโยนข้อยกเว้น
การโยนจะปรากฏขึ้นเสมอในร่างกายฟังก์ชั่นและใช้เพื่อโยนข้อยกเว้นของประเภทที่โยนได้ โปรแกรมจะยุติทันทีหลังจากคำสั่งการโยนคำสั่งหลังจากที่ไม่สามารถดำเนินการได้และในบล็อกลองทั้งหมดที่มี (อาจจะอยู่ในฟังก์ชั่นการโทรระดับบน) มองหาบล็อกลองที่มีประโยคจับที่ตรงกับมัน ข้างใน
เรารู้ว่าข้อยกเว้นเป็นวัตถุอินสแตนซ์ของคลาสข้อยกเว้นและเราสามารถสร้างวัตถุอินสแตนซ์ของคลาสข้อยกเว้นที่จะถูกโยนผ่านคำสั่งการโยน รูปแบบไวยากรณ์ของคำสั่งนี้คือ:
โยนชื่อข้อยกเว้นใหม่;
ตัวอย่างเช่นโยนวัตถุข้อยกเว้นของคลาส IOException:
โยน iOexception ใหม่;
ควรสังเกตว่าพ่นวัตถุอินสแตนซ์เฉพาะที่สามารถโยนคลาสที่โยนได้หรือ subclasses การดำเนินการต่อไปนี้ไม่ถูกต้อง:
โยนสตริงใหม่ ("ข้อยกเว้น");
นี่เป็นเพราะสตริงไม่ใช่คลาสย่อยของคลาสที่สามารถโยนได้
หากมีการโยนข้อยกเว้นการตรวจสอบคุณควรประกาศประเภทของข้อยกเว้นที่วิธีการอาจโยนลงในส่วนหัวของเมธอด ผู้โทรของวิธีนี้จะต้องตรวจสอบการจัดการข้อยกเว้นที่ถูกโยนทิ้ง
หากวิธีการทั้งหมดโยนเลเยอร์ข้อยกเว้นที่ได้มาโดยเลเยอร์ JVM จะประมวลผลในที่สุดและการประมวลผลก็ง่ายมากซึ่งก็คือการพิมพ์ข้อความข้อยกเว้นและข้อมูลสแต็ก หากมีข้อผิดพลาดหรือ RuntimeException ถูกโยนลงผู้โทรของวิธีการมีตัวเลือกในการจัดการข้อยกเว้น
การทดสอบแพ็คเกจ; import java.lang.exception; 0 โยน myexception ใหม่ ("ตัวหารไม่สามารถเป็นจำนวนลบ"); int b = 0; .out.println (e. getMessage ()); Catch (ยกเว้น oni on e) {// จัดการข้อยกเว้นอื่น ๆ System.out.println ("ข้อยกเว้นอื่น ๆ เกิดขึ้นในโปรแกรม"); ข้อความสตริง;