try {
if (check) {
while (true) ;
} else {
System.exit(1);
}
} finally {
clear();
}
问:是否存在永远不会执行clear()
的情况?
我个人觉得没有clear()不会被执行的情况。
答案 0 :(得分:3)
如果System.exit
成功,则clear()
将不会被执行。但是,System.exit(1)
could throw SecurityException
exception,在这种情况下clear()
将被执行。
答案 1 :(得分:1)
如果check
为真,那么你就会陷入无限循环,在这种情况下,你从不在技术上进入finally块。
如果check
为false,则执行System.exit(1);
并终止程序;在这种情况下,它永远不会到finally
块来执行clear()
。
在此示例中,实际上无法访问clear()
答案 2 :(得分:0)
clear仅在try块完成时执行。
如果check
为真,则while(true)将永远坐在那里,所以永远不要离开try块
如果check
为false,System.exit(0)
将退出程序,因此finally块也不会运行。但是System.exit(int)
可以抛出一个SecurityException
然后会导致finally被调用。
总而言之,我认为如果System.exit
抛出SecurityException
答案 3 :(得分:0)
是否存在clear()永远不会被执行的情况?
您提供的两个示例就是这种情况,因为您可以通过运行代码来确认。
当你有一个无限循环时,它之后什么都不执行。
当System.exit()成功时,它会立即停止线程。
答案 4 :(得分:-1)
System.exit(1)阻止finally子句运行。
基本上,在try / catch之后执行finally块,无论try或catch是正常返回还是异常返回。
然而,System.exit会阻止块返回。
while(true);显然会无限期地阻止。只是假设为while(真实);对于更有意义的事情来说,这是一个存根:)