gpt4 book ai didi

java - 我们可以在重写的方法中抛出新的/更广泛的异常吗?解释下面给出的代码

转载 作者:行者123 更新时间:2023-12-02 07:29:34 26 4
gpt4 key购买 nike

我是java初学者,如果我犯了任何错误,请原谅我,欢迎提出建议,我很乐意倾听我所犯的错误。预先感谢您阅读并回答我的问题。

我从某本书中得到以下代码

在代码中抛出了新的异常,但代码仍然可以编译,并且还有一个与我粘贴的代码类似的代码,但无法理解不同的行为

第一个代码打印 X,但根据我的说法,重写的方法 foo() 不应抛出新的异常。其次,在调用方法 foo 时,如果存在 throws 子句,则应使用 try-catch :

class X { public void foo() { System.out.print("X "); } }    

public class SubB extends X {

public void foo() throws RuntimeException {
super.foo();
if (true) throw new RuntimeException();
System.out.print("B ");
}

public static void main(String[] args) {
new SubB().foo();
}
}

第二个代码与上面类似,但是在调用该方法时我们需要使用try-catch:

class A {
void foo() throws Exception { throw new Exception(); }
}

class SubB2 extends A {
void foo() { System.out.println("B "); }
}

class Tester {
public static void main(String[] args) {
A a = new SubB2();
a.foo();
}
}

这个异常是在父类的 foo 方法中扩展的,但在上面的代码中,异常是在子类的 foo 方法中。

最佳答案

在第一个代码中,您已声明抛出 RuntimeException,这是一个 Unchecked Exception,不需要处理。因此,您也可以将其添加到重写方法的 throws 子句中,即使它不在父类方法中。

但是,在第二段代码中,您已声明抛出Exception,它位于异常层次结构中的顶层,并且是Checked > 由编译器执行,如果要抛出异常,则需要在父类方法中声明 throws 子句。此外,您还需要在调用该方法时处理它。

虽然你不能在基类的重写方法中增加限制,但从某种意义上来说,你不能在重写方法中添加额外的 CheckedException ,但是,如果你添加一个 UncheckedException ,那就是允许。

您可以通过以下链接了解有关异常处理的更多信息:-

关于java - 我们可以在重写的方法中抛出新的/更广泛的异常吗?解释下面给出的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13099425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com