当前位置: 首页 > 面试题库 >

异常与throws子句不兼容的原因是什么?

韦胜泫
2023-03-14
问题内容

谁能告诉我异常产生的原因有哪些,与“ throws”子句不兼容

例如:

class Sub extends Super{

    @Override
    void foo() throws Exception{

    }

}

class Super{

    void foo() throws IOException{

    }
}

异常异常与Super.foo()中的throws子句不兼容


问题答案:

没有完整的代码示例,我只能猜测:您正在重写/实现子类中的方法,但是子类方法的异常规范与父类/接口方法的异常规范不兼容(即,不是其子集)?

如果声明基本方法根本不抛出异常,或者例如java.io.IOException(这是java.lang.Exception您的方法的子类正在尝试在此处抛出),则可能发生这种情况。基类/接口的客户端希望其实例遵守由base方法声明的协定,因此Exception从该方法的实现中抛出将破坏协定(和LSP)。



 类似资料:
  • 我实现了自己的Runnable。run(),它告诉我捕捉InterruptedException。然后我加上, 但编译错误现在是: “与抛出条款不兼容”是什么意思。如何解决这个问题?

  • 正如您所看到的,我正在方法和构造函数的子句中声明。但我不会在身体的任何地方抛出这个例外。因此,它应该是一个编译时错误,就像我们试图捕获不是从try块抛出的异常一样。但在这种情况下,它编译得很好。有人能解释一下这种行为背后的原因吗?

  • 下面的CodeIgniter查询给出了一个错误提示; SELECT列表的表达式#22不在GROUP BY子句中,并且包含非聚合列'HW3.1.HW_COMABETY.ID',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

  • 问题内容: 我可以在脚本中使用UTF-8字符。 实际上,可以使用变量名称,而函数包含Unicode字符。 还有mb_string扩展名,用于处理多字节字符串,但是在无数文章中,PHP因缺乏Unicode支持而受到批评。 我不明白 为什么说PHP不支持Unicode? 问题答案: 几年前启动PHP时,并没有真正支持UTF-8。我们谈论的是Windows 98 / Me之类的非Unicode操作系统仍

  • 问题内容: 在下面的源代码中,我抛出一个。 为什么没有必要将关键字放在方法的签名上? 问题答案: 仅在Java 1.7上会出现此现象。使用1.6进行编译时,出现以下编译器错误消息: 但是,使用Java 1.7可以编译。 …直到我实际把一个块扔了进去: 编译中… 看起来Java 1.7足够聪明,可以通过分析块代码来检测可能抛出的类型,而1.6刚看到类型并为此给出了错误。 对其进行更改以使其按预期方式

  • 我目前正在使用gradle,似乎可以通过java插件设置sourcecompatibility和targetcompatibility 我想知道除了与旧的JDK向后兼容之外,我们使用sourcecompatibility/targetcompatibility的原因是什么? 如果没有设置sourcecompatibility/targetcompatibility,升级到最新的java会更容易吗?