如果我有以下代码
try{
//some code
}catch(Exception e){
//some code
}finally{
}
在以下情况下,finally块会发生什么
如果发生任何已检查的异常。
如果调用System.exit()。
如果发生任何未经检查的异常。
如果发生任何错误。
答案 0 :(得分:9)
finally
阻止。
finally
块,在这种情况下执行finally
块。 (见How does Java's System.exit() work with try/catch/finally blocks?)
finally
阻止。
finally
块(取决于错误的类型,如果你在谈论JVM错误,那么真的不知道会发生什么)。
答案 1 :(得分:3)
一切都清楚地说明了。 finally
将始终在所有这些情况下执行,但成功的System.exit
明显例外。
System.exit(int status)
终止 当前运行的Java虚拟机[...]此方法永远不会正常返回。
答案 2 :(得分:2)
Finally
将被执行。Finally
将不会被执行,除非System.Exit()
抛出异常。Finally
将被执行。Finally
将被执行。答案 3 :(得分:1)
catch
子句,然后触发finally
子句finally
子句finally
将不会执行。这是因为“此方法永远不会正常返回。”如果finally
抛出异常(System.exit(0)
)SecurityException
答案 4 :(得分:0)
假设finally块中没有4个项目发生,那么在代码退出之前将执行finally块,除非VM崩溃,然后所有的赌注都关闭。
的修改
System.exit()
实际上绕过finally {}
。
答案 5 :(得分:0)
转义finally子句的唯一方法是System.exit。每隔一个案例就会到达finally块。
http://www.javaworld.com/javaworld/jw-02-1997/jw-02-hood.htm
http://java.sun.com/docs/books/jls/second_edition/html/exceptions.doc.html(第11.3节)
对此很好。
答案 6 :(得分:0)
1.如果发生任何已检查的异常。 代码流为
一个。试试......
湾[检查例外]
C。跳过try的其余部分并执行catch块以检查异常
d。最后执行
2.如果调用System.exit()
终于被执行了。
3.如果发生任何未经检查的例外情况
一个。尝试...
湾[未经检查的例外]
C。跳过剩下的尝试,最后移动到
d。最后执行
4.如果发生任何错误。
a.finally执行。但程序在JVM抛出“错误”之前是吐司的