假设我有此异常:
class NoMoreCarrotsException extends Exception {}
这是一个检查的异常,因此必须对其进行处理或声明。
假设我有此方法:
private static void eatCarrot(){}
public void fails(){
try{
eatCarrot();
}catch(NoMoreCarrotsException e){}
}
还有一个:
public void works() throws NoMoreCarrotsException {
eatCarrot();
}
为什么第二个起作用而不是第一个起作用?
eatCarrot
方法不会引发异常,那么为什么我们要声明/引发异常呢?
答案 0 :(得分:8)
您可以声明您的方法(在这种情况下为works()
)throws
是一个异常,即使该异常不会抛出该异常。
原因是,这将允许覆盖您方法的子类引发该异常(或该异常的任何子类)。
另一方面,在try-catch块中,如果尝试捕获try块无法引发的异常,则catch块将变为死代码(即永远无法访问的代码),并且编译器不允许。