首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java语言中,什么时候应该调用System.exit

在Java语言中,什么时候应该调用System.exit
EN

Stack Overflow用户
提问于 2010-09-15 16:39:26
回答 5查看 362.7K关注 0票数 197

在Java中,在下面的代码中使用和不使用System.exit(0)有什么区别?

代码语言:javascript
复制
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? 
    }      
}

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-15 16:45:04

在程序退出之前,可以使用System.exit()来运行shutdown hooks。这是一种在较大程序中处理关机的便捷方法,在较大的程序中,程序的所有部分都不能(也不应该)知道彼此。然后,如果有人想退出,他可以简单地调用System.exit(),关闭钩子(如果正确设置)负责执行所有必要的关闭仪式,如关闭文件、释放资源等。

“此方法永远不会正常返回。”意味着该方法不会返回;一旦线程到了那里,它就不会返回。

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

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

票数 216
EN

Stack Overflow用户

发布于 2010-09-15 17:11:14

这个方法永远不会返回,因为它是世界末日,你的任何代码都不会被执行。

在您的示例中,您的应用程序无论如何都会在代码中的同一位置退出,但是,如果您使用System.exit。您可以选择将自定义代码返回到环境中,例如

代码语言:javascript
复制
System.exit(42);

谁将使用您的退出代码?调用应用程序的脚本。适用于Windows、Unix和所有其他可脚本化环境。

为什么要返回代码?“我没有成功”,“数据库没有回答”之类的话。

要了解如何获取退出代码的值并在unix shell脚本或windows cmd脚本中使用它,可以查看this answer on this site

票数 15
EN

Stack Overflow用户

发布于 2010-09-15 16:50:16

System.exit(0)会终止JVM。在像这样的简单示例中,很难理解其中的差异。该参数被传递回操作系统,通常用于指示异常终止(例如,某种致命错误),因此,如果您从批处理文件或shell脚本调用java,您将能够获得此值,并了解应用程序是否成功。

如果您在部署到应用程序服务器上的应用程序上调用System.exit(0),这将产生相当大的影响(在尝试之前请仔细考虑)。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3715967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档