在一篇文章(这里是链接:https://www.javatpoint.com/exception-handling-with-method-overriding)中,他们说:“如果超类方法不声明异常,子类覆盖的方法不能声明检查的异常,但它可以声明未检查的异常。”
为什么Java这样工作?因为重写的方法可以比超类的方法具有更多的特性,所以它可以抛出一些超类方法不会抛出的异常。
为什么java是这样工作的?
支持多态性并保持检查异常的想法。检查异常的意义在于告诉调用者,“嘿,这个方法可能会通过这个检查异常——你需要捕获它或声明你可能也会抛出它”。假设你有:
Superclass x = new Subclass();
x.doSomething();
... if超类。doSomething()
没有声明它可以抛出任何已检查的异常,但是在子类中对它的重写确实会抛出一个已检查的异常,编译器无法“知道”这一点,因此无法对其进行检查。
我有一个抛出检查异常的方法: 我正在尝试创建一个通用包装器,它将优雅地处理异常。 现在我正在使用,它给我编译时错误。我可能错过了什么?
问题内容: 在C#中,以的方法引发异常被认为是不好的做法。 相比之下,在java中,的方法允许抛出任何Exception并强制调用者以某种方式处理它。但是,如果发生这种情况,呼叫者应该合理地期望做什么?这表明关闭资源的尝试以某种方式失败了。那么用户是否必须在继续操作之前再次尝试关闭资源,也许需要某种指数补偿? 问题答案: 看起来每个涉及资源的操作(包括隐式close()调用)都被视为try {}块
问题内容: 假设我有一个抛出某种Exception的方法。引发异常的代码位于访问外部服务的第三方库中。我有一些课程可以很好地处理外部服务,并且有很多异常处理程序可以处理潜在的问题。我遇到的问题是我可能有很多异常,但是如果有一个动作,并且可能有大量尝试/捕获块,我可能只需要执行几个动作之一。异常的类型甚至可能不相关,或者不同的方法可能会抛出相同类型的异常,但是根据抛出该异常的方法,需要采取不同的操作
问题内容: 在Java中,我们使用try catch块处理异常。我知道我可以像下面这样编写一个try catch块来捕获方法中抛出的任何异常。 但是Java中有什么方法可以让我在发生异常时获取一种称为的特定方法,而不是像上面的方法那样编写一个包罗万象的方法? 具体来说,当抛出异常(我的应用程序逻辑未处理)时,我想在Swing应用程序中显示一条用户友好的消息。 谢谢。 问题答案: 默认情况下,JVM
下面是这本书的一段话: 覆盖方法不得抛出比覆盖方法声明的异常新的或更广泛的检查异常。例如,声明FileNotFoundException的方法不能被声明SQLException、Exception或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类。 现在我的问题是,如果超类中的方法抛出一个异常,那么重写方法能否根本不抛出一个异常? 因为我刚刚在Java中尝试
问题内容: 对于servlet生命周期的东西,你们建议如何响应异常… 例如, 我不确定要如何处理上面的运行时异常。我的想法是,如果在这里抛出异常,那么它们的严重性足以完全破坏系统,因此(未处理的)运行时异常 可能还 可以。 我想我问的是什么处理来自servlet上下文侦听器的未经检查的异常? 问题答案: 捕获异常时,您可能需要考虑设置属性以指示遇到错误。这样,如果容器尚未禁用应用程序,则可以让一个