main()方法的Java应用程序出口代码的工作原理



我对一个简单的命令行Java应用程序有以下疑问。

因此,我有了这个命令行应用程序,它是由Main类中定义的main()方法启动的。与往常一样,这个main()方法是用以下签名定义的:

public static void main(String[] args) {

它的返回类型是void,这意味着它不返回任何值。但当它的执行正确终止时,我在IntelliJ控制台中获得以下消息。

Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket'
Process finished with exit code 0

什么代表exit code 0?我认为这意味着程序正确地完成了它的执行,而没有出现任何错误。

所以现在我有以下两个疑问:

  1. 如果这是真的,为什么我的main()方法返回void

  2. 如果我的应用程序以错误结束,我如何返回不同的退出代码?

是否有以错误结尾的标准退出代码值?

时VM退出

  • 所有非守护进程线程停止运行,或者
  • 调用System.exit(exitCode)

在第一种情况下,退出代码为0。在第二种情况下,它是传递给exit()方法的退出代码。

不要忘记,即使main()方法返回,程序也会继续运行,直到没有非守护进程线程运行为止。在虚拟机中运行的任何线程都可以选择显式退出。

退出代码0表示一切按预期进行。您可以选择使用任何其他退出代码向环境发出异常情况的信号。

进程的退出代码是进程向操作系统报告的错误代码。

Java设计人员可以制作main()方法来返回int,这样JVM就可以将该值作为进程退出代码报告给OS。但他们决定制作main void,但提供API,可以使用System.exit(exitCode)更新此代码。这种解决方案的优点是,程序可以决定在任何点和任何线程中退出,而不仅仅是在主方法和主线程中。

退出代码为0表示它正常完成,这是所有进程的标准,而不仅仅是java。该值不是从主方法返回的(它是空的),而是从JVM本身返回的。

可以指定不同的值,例如System.exit(1),以指示某些错误条件,并且程序停止。

相关内容

  • 没有找到相关文章

最新更新