gpt4 book ai didi

java - 为什么在这种情况下允许抛出已检查的异常类型?

转载 作者:太空狗 更新时间:2023-10-29 22:45:04 25 4
gpt4 key购买 nike

我偶然注意到这个 throw 语句(从一些更复杂的代码中提取)编译:

void foo() {
try {

} catch (Throwable t) {
throw t;
}
}

有一个短暂但快乐的时刻,我认为检查异常终于决定已经死了,但它仍然感到骄傲:

void foo() {
try {

} catch (Throwable t) {
Throwable t1 = t;
throw t1;
}
}

try block 不必为空;似乎它可以有代码,只要该代码不抛出已检查的异常。这似乎是合理的,但我的问题是,语言规范中的什么规则描述了这种行为?据我所知,§14.18 The throw Statement明确禁止它,因为 t 表达式的类型是一个已检查的异常,它没有被捕获或声明为抛出。 (?)

最佳答案

这是因为 Project Coin 中包含的更改,在 Java 7 中引入,允许通过重新抛出原始异常进行一般异常处理。这是一个适用于 Java 7 但不适用于 Java 6 的示例:

public static demoRethrow() throws IOException {
try {
throw new IOException("Error");
}
catch(Exception exception) {
/*
* Do some handling and then rethrow.
*/
throw exception;
}
}

您可以阅读解释更改的整篇文章 here .

关于java - 为什么在这种情况下允许抛出已检查的异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24981736/

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