我知道finally
的用途是保证某些指令或清理代码得到执行。但是使用finally
或在catch块之后放置代码的真正区别是什么。
我的意思是,给我一个例子,你需要使用finally
,否则代码可能根本不会执行。关于finally块
回答
最后会执行catch块中发生的事情。有几种情况存在。
catch(Exception E)
{
...
throw new OtherException(BetterMessage, E);
}
或
catch { return null; }
或
catch { SomeMethodThatWillThrowAnException(); }
因此,即使您返回或者抛出一个异常退出Catch块,你还是会执行finally块,而任何代码简单地在try-catch之后将被忽略。
有'try {return; } ...也是如@Petros P建议的那样,以及'exit()'情况。 – Elist
即使抛出并捕获,最后一个块也会发射,无论发生什么。例如,如果您的catch可能导致进程结束或应用程序崩溃,则放在不在finally块中的catch之后的代码可能无法执行。
我明白了。如果应用程序崩溃,我想运行什么样的代码?这实际上是我最感兴趣的 –
确保在崩溃的某个地方记录某些事情。尝试提醒另一个有关失败的进程。保存任何用户数据,你仍然可以。尝试重新启动应用程序。无论你想要什么 - 这更多的是一个架构决定; FINALLY块绝对不是*永远*必需的,因为肯定有时候在上下文中没有用处。 – kyzen
无论是否引发异常,finally
块都会执行。
你的问题是,使用finally
和catch
块后面的区别是什么。如果抛出异常,catch
块之后的代码将不会被执行。如果您将代码放在finally
区块中,它将会。
可能会发生一些您不会捕获的异常。 finally
块即使在引发意外的异常时也能保证其内部代码的执行。
终于执行不管什么。
一个例子
public void test() {
try {
int x = 0;
return;
} catch(Exception ex) {
ex.printStackTrace();
} finally {
System.out.println("Hello from finally");
}
System.out.println("Hello from after catch");
}
在这种情况下,“你好,从抓到底”将不被打印,但“你好,从最后”的意愿。
- 1. 语句finally块
- 2. 仅在finally块中关闭JDBC连接?
- 3. 关闭数据库连接()内finally块
- 4. 空与传统finally块用于关闭资源
- 5. 从try块跳跃finally块
- 6. try/finally块问题
- 7. finally块Application.Run(新main_form)
- 8. 不能跳出finally块
- 9. 尝试,catch和finally块
- 10. 尝试-finally块澄清
- 11. 在finally块中处理
- 12. finally块来表现不同
- 13. 检测例外finally块
- 14. Java异常处理finally块
- 15. 执行顺序和finally块
- 16. java中的try-catch-finally块
- 17. 的Java试戴catch- finally块
- 18. 使用没有'catch'块的'try-finally'块
- 19. return finally before finally
- 20. 我是否需要关闭Quartz调度程序在finally块中?
- 21. 问题与Source.fromURL当试图关闭它在finally块
- 22. 异常来自于最后一个Try-Finally块
- 23. 如何“终于”下一个finally块在Android上运行
- 24. 用等于try/finally块替换使用语句
- 25. 在finally块中做Response.Write是否正确?
- 26. 斯卡拉尾递归从finally块
- 27. 的Java IO丑陋的try-finally块
- 28. C# - 的Thread.join(毫秒)和finally块
- 29. 双人间异常抛出finally块
- 30. 如何在Visual Studio中调试finally块?
即使抛出并不捕获,或者捕获并重新抛出或返回,“finally”块也会执行。 '尝试{抛出新的错误(); } finally {“do somehting”}'仍然运行finally。 –
我可以得到这些场景中的每一个的代码示例 –