การthrows Exception
ประกาศเป็นวิธีอัตโนมัติในการติดตามวิธีการที่อาจทำให้เกิดข้อยกเว้นสำหรับเหตุผลที่คาดการณ์ไว้ แต่หลีกเลี่ยงไม่ได้ การประกาศเป็นปกติที่เฉพาะเจาะจงเกี่ยวกับประเภทหรือชนิดของข้อยกเว้นที่อาจจะถูกโยนเช่นหรือthrows IOException
throws IOException, MyException
เราทุกคนมีหรือจะเขียนโค้ดที่หยุดกะทันหันและรายงานข้อยกเว้นอันเนื่องมาจากสิ่งที่เราไม่คาดคิดก่อนที่จะรันโปรแกรมเช่นการหารด้วยศูนย์หรือดัชนีนอกขอบเขต เนื่องจากวิธีนี้ไม่ได้คาดหวังข้อผิดพลาดจึงไม่สามารถ "จับ" และจัดการด้วยประโยค try catch ได้ ผู้ใช้วิธีการที่ไม่สงสัยจะไม่ทราบถึงความเป็นไปได้นี้และโปรแกรมของพวกเขาก็จะหยุดลงเช่นกัน
เมื่อโปรแกรมเมอร์ทราบว่าอาจมีข้อผิดพลาดบางประเภทเกิดขึ้น แต่ต้องการจัดการข้อยกเว้นเหล่านี้นอกเมธอดเมธอดสามารถ "โยน" ข้อยกเว้นหนึ่งประเภทขึ้นไปให้กับเมธอดการโทรแทนการจัดการ หากโปรแกรมเมอร์ไม่ได้ประกาศว่าเมธอด (อาจ) มีข้อยกเว้น (หรือถ้า Java ไม่มีความสามารถในการประกาศ) คอมไพลเลอร์ไม่สามารถทราบได้และจะขึ้นอยู่กับผู้ใช้เมธอดในอนาคตที่จะทราบ จับและจัดการข้อยกเว้นใด ๆ ที่วิธีการอาจขว้าง เนื่องจากโปรแกรมสามารถมีหลายชั้นของวิธีการที่เขียนโดยโปรแกรมที่แตกต่างกันจึงเป็นเรื่องยาก (เป็นไปไม่ได้) ที่จะติดตามว่าวิธีการใดอาจมีข้อยกเว้น
แม้ว่า Java จะมีความสามารถในการประกาศข้อยกเว้น แต่คุณยังสามารถเขียนเมธอดใหม่โดยใช้ข้อยกเว้นที่ไม่ได้จัดการและไม่ได้ประกาศและ Java จะรวบรวมและคุณสามารถเรียกใช้และหวังว่าจะดีที่สุด สิ่งที่ Java ไม่ยอมให้คุณทำคือรวบรวมวิธีการใหม่ของคุณหากใช้วิธีการที่ได้รับการประกาศว่าเป็นข้อยกเว้นในการขว้างปาเว้นแต่คุณจะจัดการข้อยกเว้นที่ประกาศไว้ในวิธีการของคุณหรือประกาศว่าวิธีการของคุณเป็นการขว้างแบบเดียวกัน ข้อยกเว้นหรือหากมีข้อยกเว้นหลายข้อคุณสามารถจัดการบางส่วนและโยนส่วนที่เหลือ
เมื่อโปรแกรมเมอร์ประกาศว่าเมธอดนี้มีข้อยกเว้นบางประเภทมันเป็นเพียงวิธีอัตโนมัติในการเตือนโปรแกรมเมอร์คนอื่น ๆ โดยใช้วิธีการที่อาจเกิดข้อยกเว้นได้ จากนั้นโปรแกรมเมอร์สามารถตัดสินใจที่จะจัดการกับข้อยกเว้นหรือส่งต่อคำเตือนโดยการประกาศวิธีการโทรในขณะที่โยนข้อยกเว้นเดียวกัน เนื่องจากคอมไพลเลอร์ได้รับการเตือนข้อยกเว้นจึงเป็นไปได้ในวิธีการใหม่นี้จึงสามารถตรวจสอบได้โดยอัตโนมัติว่าผู้โทรในอนาคตของเมธอดใหม่จัดการกับข้อยกเว้นหรือประกาศและบังคับให้เกิดข้อยกเว้นอย่างใดอย่างหนึ่ง
สิ่งที่ดีเกี่ยวกับการแก้ปัญหาประเภทนี้คือเมื่อคอมไพเลอร์รายงานError: Unhandled exception type java.io.IOException
ว่าจะให้ไฟล์และหมายเลขบรรทัดของเมธอดที่ประกาศว่าจะทิ้งข้อยกเว้น จากนั้นคุณสามารถเลือกเพียงแค่ส่งบัคและประกาศว่าวิธีการของคุณ "พ่น IOException" ซึ่งสามารถทำได้จนถึงเมธอดหลักซึ่งจะทำให้โปรแกรมหยุดทำงานและรายงานข้อยกเว้นให้ผู้ใช้ทราบ อย่างไรก็ตามควรจับข้อยกเว้นและจัดการด้วยวิธีที่ดีเช่นอธิบายให้ผู้ใช้เข้าใจว่าเกิดอะไรขึ้นและจะแก้ไขอย่างไร เมื่อเมธอดจับและจัดการกับข้อยกเว้นก็ไม่จำเป็นต้องประกาศข้อยกเว้นอีกต่อไป คนเจ้าชู้หยุดอยู่ที่นั่นเพื่อที่จะพูด