在try或catch块上调用return语句或System.exit

Abh*_*tia 7 java

我在采访中得到了以下问题:

如果在try或catch块上调用return语句或System.exit会发生什么?最后会阻止执行吗?

finally块总是被执行吗?

编辑: 在java中尝试上述后:

  1. finally 如果我在try块或catch块中放入return语句,则执行block

  2. finally 如果我调用System.exit表单try或catch,则块不会运行.

我不知道背后的原因.

Ste*_*n C 7

如果在try或catch块上调用return语句或System.exit会发生什么?

最后会阻止执行吗?

在a的情况下return,是的.如果你想要血淋淋的细节,它们在JLS第14.20.2节中规定.

(请注意,在JLS术语中,return计为突然终止.但这并不重要,因为当您仔细分析规范时,您将看到正常突然终止finally都会执行.)

在a的情况下System.exit(),否.对exit方法的调用永远不会返回,并且它也不会抛出异常.因此,finally线程的"封闭" 子句永远不会被执行.

(在JLS的说法中,exit()调用根本没有"终止".它在概念上与进入无限循环的方法相同(神奇地)不使用任何CPU时间.与JVM关闭相关的所有活动都发生在其他线程.)