是否有任何代码,永远不会执行finally子句?

时间:2011-04-07 10:44:32

标签: java

  

可能重复:
  Is there such case when in try\finally block the finally won't be executed?

是否有任何代码,永远不会执行finally子句?

7 个答案:

答案 0 :(得分:7)

Java Tutorials

不仅适用于System.exit,还适用于线程中断

  

注意:如果在执行try或catch代码时JVM退出,   那么finally块不会   执行。同样,如果线程   执行try或catch代码是   中断或杀死,终于   即使是块也不会执行   申请作为一个整体继续。

答案 1 :(得分:4)

System.exit(0)就是一个例子。如果您编译并在“Bye”下运行将永远不会打印。

public class Main {
    public static void main(String[] args) {
        try {
            System.out.println("Hi");
            System.exit(0);
        }
        finally {
            System.out.println("Bye!");
        }
    }
}

答案 2 :(得分:4)

System.exit(0)如果不抛出安全异常。

答案 3 :(得分:4)

这是另一个例子:

try {
    while (true) {
       System.err.println("Its great to be alive");
    }
} finally {
    System.err.println("I wish!");
}

答案 4 :(得分:2)

System.exit(0);

答案 5 :(得分:1)

简而言之,如果JVM在线程位于相应的finally块内时停止,或者如果使用某些低级机制(而不是{{1})终止线程,则不执行try块})。

除了Thread.stop()的明显示例之外,即使正常的JVM关闭对于守护程序线程也可能是意外的:

System.exit()

答案 6 :(得分:0)

同样在我的训练中,我找到了一个新的解决方案,这是可以接受的

try {
if (choice) {
  while (true) ;
} else {
  System.exit(1);
}
} finally {
code.to.cleanup();

}

相关问题