มีสถานการณ์เฉพาะอย่างหนึ่งที่เราไม่สามารถใช้การขว้างได้เราต้องใช้การลองจับ มีกฎ "วิธีการลบล้างไม่สามารถทิ้งข้อยกเว้นพิเศษใด ๆ นอกเหนือจากสิ่งที่คลาสพาเรนต์กำลังขว้าง" หากมีข้อยกเว้นพิเศษใด ๆ ที่ควรจัดการโดยใช้การลองจับ พิจารณาข้อมูลโค้ดนี้ มีคลาสฐานง่ายๆ
package trycatchvsthrows;
public class Base {
public void show()
{
System.out.println("hello from base");
}
}
และเป็นคลาสที่ได้รับ:
package trycatchvsthrows;
public class Derived extends Base {
@Override
public void show() {
// TODO Auto-generated method stub
super.show();
Thread thread= new Thread();
thread.start();
try {
thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// thread.sleep(10);
// here we can not use public void show() throws InterruptedException
// not allowed
}
}
เมื่อเราต้องเรียก thread.sleep () เราถูกบังคับให้ใช้ try-catch ที่นี่เราไม่สามารถใช้:
public void show() throws InterruptedException
เนื่องจากวิธีการแทนที่ไม่สามารถทำให้เกิดข้อยกเว้นเพิ่มเติมได้