java - 如果我们在方法签名中写了 throws child 类型异常,我们可以在方法中抛出 Parent 类型异常吗?

标签 java exception

public void foo1() throws OException
{
    try {

    } catch(Exception e) {
        throw e;
    }
}

OException 扩展了 Exception

OException是第三方提供的API类

我在 throw e 语句的 catch block 中遇到编译错误,内容为

unhandled exception type exception

这是因为我无法像我编写的方法签名中那样抛出 Parent 类型异常 throws OException 吗?

我可以通过以下两种方式解决此编译错误:-

  • 如果我在方法签名中抛出 Exception 而不是 OException
  • 如果我在 catch block 中抛出 OException 而不是父类型 Exception e

我的一个 friend 在他的工作区中打开了相同的代码,并且没有给他带来任何复杂的错误,所以我对这里到底发生了什么感到困惑。

有人可以解释一下吗?

最佳答案

Exception 是受检查的异常类型。这意味着您必须捕获它(使用 try { ... } catch(Exception ex) { ... } 或使用 throws 在方法中声明它。

由于 Exception 类位于异常层次结构中的 OException 之上,因此您必须将 throws OException 更改为 throws Exception >.

如果捕获并重新抛出的异常类型是 OException,则 throws 异常声明就可以了。

关于java - 如果我们在方法签名中写了 throws child 类型异常,我们可以在方法中抛出 Parent 类型异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269135/

相关文章:

java - 在 Java Lambda 中,为什么在捕获的变量上调用 getClass()

java - Xalan 重定向 :write , 使用两个元素值之一根据空值创建新 .xml 文件的名称

java - 我哪里错了? (异常处理)

vba - 如何处理另一个工作簿的 Workbook_Open 事件中生成的错误?

java - 如何序列化JPanel?

java - SBT 运行 scala 和 java 之间的差异?

java - Spring MVC请求方法 'PATCH'不支持

java - Java7 的多异常 catch 子句是否使用鸭子类型?

java - 由空指针异常引起的初始化程序异常

java - null异常如何进入try-catch分支?