假设我有这个异常(exception):
class NoMoreCarrotsException extends Exception {}
这是一个已检查的异常,因此必须对其进行处理或声明。
假设我有这个方法:
private static void eatCarrot(){}
public void fails(){
try{
eatCarrot();
}catch(NoMoreCarrotsException e){}
}
还有这个:
public void works() throws NoMoreCarrotsException {
eatCarrot();
}
为什么第二个有效但第一个无效?
eatCarrot
方法不会抛出异常,那么为什么我们可以声明/抛出它呢?
最佳答案
您可以声明您的方法(在本例中是works()
)抛出
异常,即使它不抛出异常。
原因是这将允许重写您的方法的子类抛出该异常(或该异常的任何子类)。
另一方面,在 try-catch block 中,如果您 try catch try block 无法抛出的异常,则您的 catch block 将变成死代码(即永远无法到达的代码),并且编译器不允许。
关于java - 为什么不能处理这个异常呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275284/