Une*_*hly 0 java exception try-catch try-catch-finally
我正在学习例外,我发现你可以有压抑的例外。我在 stackoverflow 上读了很多例子,但它们仍然不能像在“try/finally”情况下那样工作:
public class MultipleExceptionsExample {
static class IOManip implements Closeable{
@Override
public void close() {
throw new RuntimeException("from IOManip.close");
}
}
public static void main(String[] args) {
try(IOManip ioManip = new IOManip()){
throw new RuntimeException("from try!");
}catch(Exception e){
throw new RuntimeException("from catch!");
}finally{
throw new RuntimeException("from finally!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如许多人所解释的,我应该得到所有行:“java.lang.RuntimeException:来自finally!” (是的,我愿意)
删除finally块我应该得到:“java.lang.RuntimeException:来自catch!” (是的,我愿意)
删除 catch 块我应该得到:
Exception in thread "main" java.lang.RuntimeException: from try!
Suppressed: java.lang.RuntimeException: from IOManip.close
Run Code Online (Sandbox Code Playgroud)
我从来不这样做!为什么?我缺少什么?
通过删除 catch 块,我应该看到 try 消息,但我得到的是:
Exception in thread "main" java.lang.RuntimeException: from finally!
at it.core.MultipleExceptionsExample.main(MultipleExceptionsExample.java:18)
Run Code Online (Sandbox Code Playgroud)
多谢。
块中的 return 或 throwfinally会导致任何其他返回(或抛出)的结果被忽略。
不要return或throw阻止finally,除非你真的知道自己在做什么。
应该注意的是,Java Throwables 有一个“抑制”异常的概念:您可以调用您捕获的addSuppressed异常;如果主体中发生异常并且在关闭资源时,Throwable这是通过try-with-resources块自动完成的;但对于投掷块来说,这种情况不会发生。finally
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |