问题

有没有最终可能无法在java中运行的条件?谢谢。


#1 热门回答(127 赞)

来自Sun Tutorials

注意:如果在执行try或catch代码时JVM退出,则finally块可能无法执行。同样,如果执行try或catch代码的线程被中断或终止,则即使应用程序作为一个整体继续,finally块也可能不会执行。

我不知道finally块不会执行的任何其他方式......


#2 热门回答(56 赞)

System.exit关闭虚拟机。

终止当前运行的Java虚拟机。该参数用作状态代码;按照惯例,非零状态代码表示异常终止。此方法在类Runtime中调用exit方法。此方法永远不会正常返回。

try {
        System.out.println("hello");
        System.exit(0);
    }
    finally {
        System.out.println("bye");
    } // try-finally

"bye"不会在上面的代码中打印出来。


#3 热门回答(45 赞)

只是为了扩展其他人所说的内容,任何不会导致JVM退出的事情都会导致最终阻塞。所以方法如下:

public static int Stupid() {
  try {
    return 0;
  }
  finally {
    return 1;
  }
}

会奇怪地编译并返回1。


原文链接