gpt4 book ai didi

java - 已检查未检查异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:42 24 4
gpt4 key购买 nike

考虑以下代码

private int meth()
{
try
{
return 1;
}
catch(Exception ex)
{
return 2;
}
finally
{
return 3;
}
}

编译上述代码时,“Exception”被视为未经检查的异常。那就是“unreachable catch block Exception is never throw in try block”编译错误不会发生。考虑到我正在声明我自己的异常,

class MyException extends Exception
{
}

并在代码中使用它

private int meth()
{
try
{
return 1;
}
catch(MyException me)
{
return 2;
}
finally
{
return 3;
}
}

在这个“unreachable catch block MyException is never throw in try block”中发生编译错误。为什么在第一种情况下“Exception”被视为 RuntimeException 而在第二种情况下即使“MyException”是“Exception”的子类它也被视为已检查的异常。有人可以帮我解决这个问题吗?

最佳答案

此行为的原因是 Java 语言中唯一未经检查的异常是 RuntimeException 及其子类。所有其他异常和错误,包括您的异常和错误,因为它仅子类异常(而不是 RuntimeException)是已检查的异常。

第一个代码示例虽然使用 Exception 类作为其 catch 语句,但未被编译器标记的原因是类层次结构。由于所有异常都派生自 Exception,因此您的代码并不是专门捕获 Exception,而是捕获所有异常并将它们转换为 Exception 的一个实例。因此,编译器无法判断将在运行时捕获的异常是已检查异常还是未检查异常。在第二个代码块中,捕获到的异常不可能不是已检查异常,因此编译器可以确定您的 catch block 不可达。

关于java - 已检查未检查异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107648/

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