小编典典

我们什么时候应该在 Java 中调用 System.exit

all

System.exit(0)在Java中,以下代码有或没有有什么区别?

public class TestExit
{      
    public static void main(String[] args)
    { 
        System.out.println("hello world");

        System.exit(0);  // is it necessary? And when it must be called? 
    }      
}

文件说:“这个方法永远不会正常返回。”
这是什么意思?


阅读 56

收藏
2022-07-09

共1个答案

小编典典

System.exit()可用于在程序退出之前运行关闭挂钩。这是在更大的程序中处理关闭的一种方便方法,其中程序的所有部分都不能(也不应该)相互了解。然后,如果有人想退出,他可以简单地调用System.exit(),然后关闭挂钩(如果设置正确)负责执行所有必要的关闭仪式,例如关闭文件、释放资源等。

“这个方法永远不会正常返回。” 仅表示该方法不会返回;一旦一个线程去那里,它就不会回来了。

另一种可能更常见的退出程序的方法是简单地到达main方法的末尾。但是如果有任何非守护线程在运行,它们不会被关闭,因此 JVM
也不会退出。因此,如果你有任何这样的非守护线程,你需要一些其他的方法(除了关闭钩子)来关闭所有非守护线程并释放其他资源。如果没有其他非守护线程,则返回
frommain将关闭 JVM 并调用关闭钩子。

出于某种原因,关闭挂钩似乎是一种被低估和被误解的机制,人们正在通过各种专有的自定义黑客重新发明轮子来退出他们的程序。我会鼓励使用关闭挂钩;无论如何,它都在您将要使用的标准运行时中。

2022-07-09