我在采访中得到了以下问题:
如果在try或catch块上调用return语句或System.exit会发生什么?最后会阻止执行吗?
finally块总是被执行吗?
编辑: 在java中尝试上述后:
finally 如果我在try块或catch块中放入return语句,则执行block
finally 如果我调用System.exit表单try或catch,则块不会运行.
我不知道背后的原因.
如果在try或catch块上调用return语句或System.exit会发生什么?
最后会阻止执行吗?
在a的情况下return,是的.如果你想要血淋淋的细节,它们在JLS第14.20.2节中规定.
(请注意,在JLS术语中,return计为突然终止.但这并不重要,因为当您仔细分析规范时,您将看到正常和突然终止finally都会执行.)
在a的情况下System.exit(),否.对exit方法的调用永远不会返回,并且它也不会抛出异常.因此,finally线程的"封闭" 子句永远不会被执行.
(在JLS的说法中,exit()调用根本没有"终止".它在概念上与进入无限循环的方法相同(神奇地)不使用任何CPU时间.与JVM关闭相关的所有活动都发生在其他线程.)
| 归档时间: |
|
| 查看次数: |
8805 次 |
| 最近记录: |