为什么不能处理此异常?

时间:2019-01-20 09:55:17

标签: java exception

假设我有此异常:

class NoMoreCarrotsException extends Exception {}

这是一个检查的异常,因此必须对其进行处理或声明。

假设我有此方法:

private static void eatCarrot(){}
public void fails(){
   try{ 
      eatCarrot(); 
   }catch(NoMoreCarrotsException e){}
}

还有一个:

public void works() throws NoMoreCarrotsException { 
    eatCarrot(); 
}

为什么第二个起作用而不是第一个起作用? eatCarrot方法不会引发异常,那么为什么我们要声明/引发异常呢?

1 个答案:

答案 0 :(得分:8)

您可以声明您的方法(在这种情况下为works()throws是一个异常,即使该异常不会抛出该异常。

原因是,这将允许覆盖您方法的子类引发该异常(或该异常的任何子类)。

另一方面,在try-catch块中,如果尝试捕获try块无法引发的异常,则catch块将变为死代码(即永远无法访问的代码),并且编译器不允许。