代码永远不会清除的情况()

时间:2012-10-31 15:51:20

标签: java

try {
    if (check) {
        while (true) ;
    } else {
        System.exit(1);
    }
} finally {
    clear();
}

问:是否存在永远不会执行clear()的情况? 我个人觉得没有clear()不会被执行的情况。

5 个答案:

答案 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(真实);对于更有意义的事情来说,这是一个存根:)