gpt4 book ai didi

java - 为什么你可以抛出一个未发生的异常但不捕获它

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:20 26 4
gpt4 key购买 nike

public void throwTest() throws SQLException, IOException {
try{
} catch (SQLException e) {
}
}

为什么 try catch 不会发生的异常会产生编译错误,而我可以抛出任何异常,却不会产生错误?两者都可以在编译时检查,所以如果行为相同对我来说更有意义?

在给定的示例中,catch block 将生成编译时错误:错误:永远不会在相应的 try 语句的主体中抛出异常 SQLException } catch (SQLException e){

当我删除 catch block 时,代码编译得很好。这对我来说似乎不一致。这种行为有什么特别的原因吗?

最佳答案

捕获可以在编译时确定。 throws 声明实际上可能不会在当前方法中抛出,但确实会在某个子类的overriden 方法中抛出。它是以子类的形式使用该类的契约(Contract):它可能会抛出该异常,并且需要处理该异常。它还允许子类的方法抛出该方法。

关于java - 为什么你可以抛出一个未发生的异常但不捕获它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750123/

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