class X
{
public void met()
{
}
}
class Y extends X
{
public void met() throws NullPointerException
{
throw new NullPointerException();
}
}
根据我读到的其他问题(为什么重写方法不能抛出比重写方法更广的异常?以及Java方法抛出异常)
我知道子类中的重写方法必须抛出在重写方法中抛出的异常的相同或一个子类。
Java方法总是至少抛出一个类型为exception的异常吗?
...换句话说,编译器添加抛出异常
因此类X将如下所示
class X {
public void met() throws Exception {
}
}
我想澄清的是,对于始终添加默认异常处理程序异常这一事实,我没有搞错。
相关问题:
IOException与RuntimeException Java
有两种类型的异常:检查的异常(如解析文本时的ParseException
)和未检查的异常(如NullPointerException
)。
检查的异常必须在方法签名中声明。未检查的异常可能在方法签名中声明。
当重写方法(从接口或超类)时,您只需要指定在实现中抛出的异常。不能声明在实现中抛出重写方法中不允许的检查异常。
这是允许的:
class X { void someMethod() }
class Y extends X { @Override void someMethod() throws UncheckedException }
class X { void someMethod() }
class Y extends X { @Override void someMethod() throws CheckedException }
class X { void someMethod() throws CheckedException }
class Y extends X { @Override void someMethod() }
主要内容:throws 声明异常,throw 拋出异常Java 中的异常处理除了捕获异常和处理异常之外,还包括声明异常和拋出异常。实现声明和抛出异常的关键字非常相似,它们是 throws 和 throw。 可以通过 throws 关键字在方法上声明该方法要拋出的异常,然后 在方法内部通过 throw 拋出异常对象。本节详细介绍在 Java 中如何声明异常和拋出异常。 throws 声明异常 当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部
问题内容: 是否可以在String方法中使用默认参数。代码如下所示: 上面的代码生成错误。有可能纠正吗? 问题答案: 不,您通常这样做的方法是重载这样的方法:
问题内容: 如果我有抛出未检查的异常的方法,例如: 明确声明该方法引发异常有什么好处,即 与(或除了)描述javadoc中的行为相反: 我之所以声称拥有无效的原因是: 没有提供有关在什么情况下会引发异常的信息,只是提供了 可能 引发异常的信息; 因为它是未经检查的异常,所以我不必在调用代码中处理该异常。我只会真正知道,如果我去看看的实现,可能会抛出该错误; 的主体可能会调用引发其他类型的未经检查的
所以我正在尝试重构以下代码: 我想出了下面的开头: 但是,它不编译(显然),因为不能抛出。有什么方法可以将它添加到的方法声明中吗? 还是只有这样才能做到? 更新后,我才意识到接口非常简单,因为它只有方法。我扩展的最初原因是优先于基本功能,例如默认方法。
上一节展示了如何为ListOfNumbers类中的writeList方法编写异常处理程序。 有时,它适合代码捕获可能发生在其中的异常。 但在其他情况下,最好让一个方法进一步推给上层来调用堆栈处理异常。 例如,如果您将ListOfNumbers类提供为类包的一部分,则可能无法预期包的所有用户的需求。 在这种情况下,最好不要捕获异常,并允许一个方法进一步推给上层来调用堆栈来处理它。 如果writeLi
问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静