gpt4 book ai didi

java - try-finally 和 try-catch 的区别

转载 作者:IT老高 更新时间:2023-10-28 11:42:39 38 4
gpt4 key购买 nike

有什么区别

try {
fooBar();
} finally {
barFoo();
}

try {
fooBar();
} catch(Throwable throwable) {
barFoo(throwable); // Does something with throwable, logs it, or handles it.
}

我更喜欢第二个版本,因为它让我可以访问 Throwable。这两种变体之间是否存在逻辑差异或首选约定?

另外,有没有办法从 finally 子句访问异常?

最佳答案

这是两个不同的东西:

  • 只有在 try block 中抛出异常时才会执行 catch block 。
  • finally block 总是在 try(-catch) block 之后执行,无论是否抛出异常。

在您的示例中,您没有展示第三种可能的构造:

try {
// try to execute this statements...
}
catch( SpecificException e ) {
// if a specific exception was thrown, handle it here
}
// ... more catches for specific exceptions can come here
catch( Exception e ) {
// if a more general exception was thrown, handle it here
}
finally {
// here you can clean things up afterwards
}

而且,就像@codeca 在他的评论中所说,没有办法访问 finally block 内的异常,因为即使没有异常,也会执行 finally block 。

当然,您可以在 block 外声明一个保存异常的变量,并在 catch block 内分配一个值。之后,您可以在 finally block 中访问此变量。

Throwable throwable = null;
try {
// do some stuff
}
catch( Throwable e ) {
throwable = e;
}
finally {
if( throwable != null ) {
// handle it
}
}

关于java - try-finally 和 try-catch 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854910/

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