gpt4 book ai didi

java - 捕获的异常未使用正确的方法处理

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:57 25 4
gpt4 key购买 nike

我有下面的简单代码:

class Test {

public static void main(String[] args) {

Test t = new Test();

try {
t.throwAnotherException();
} catch (AnotherException e) {
t.handleException(e);
}

try {
t.throwAnotherException();
} catch (Exception e) {
System.out.println(e.getClass().getName());
t.handleException(e);
}

}

public void throwAnotherException() throws AnotherException {
throw new AnotherException();
}

public void handleException(Exception e) {
System.out.println("Handle Exception");
}

public void handleException(AnotherException e) {
System.out.println("Handle Another Exception");
}

}

class AnotherException extends Exception {

}

为什么在第二个catch中调用的方法是签名为void handleException(Exception e)而异常类型是AnotherException

最佳答案

重载方法在编译时解析,基于形式参数类型,而不是运行时类型

这意味着如果 B extends A,并且您有

void thing(A x);

void thing(B x);

然后

B b = new B();
thing(b);

会寻找一个接受Bthing(),因为b的正式类型是B;但是

A b = new B();
thing(b);

会寻找一个接受Athing(),因为b的正式类型是A,即使它的运行时实际类型将是 B

在您的代码中,e 的形式类型在第一种情况下是 AnotherException,但在第二种情况下是 Exception。在每种情况下,运行时类型都是 AnotherException

关于java - 捕获的异常未使用正确的方法处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247599/

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