java - 为什么不能处理这个异常呢?

标签 java exception

假设我有这个异常(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/

相关文章:

java - 具有等效于 Java 7 try-multiple-catch block 的编程语言?

java - if else 语句的多变量

java - JFrame打开很小

java - 如何在单个 catch block 中处理所有 java.net 异常?

c++ - 执行 itk::writertype 的 update() 时出现异常

java - java中抛出异常重构

java - 对文件使用 PrintWriter

java - 是否必须将字节流 POST 到任何接受文件的 API,还是依赖于 API?

java - 在标签(Actor)上设置文本会停止绘制

java - 可调用 : why can we "change" the exception on implementation?