main() 方法的 Java 应用程序退出代码究竟是如何工作的?

2022-09-01 18:29:34

我有以下与简单的命令行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

退出代码 0 的确切含义是什么?我认为这意味着程序已正确完成其执行,而不会产生任何错误。

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

  1. 如果这是真的,为什么如果我的main()方法返回void,就会发生这种情况?

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

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


答案 1

虚拟机在以下情况下退出

  • 所有非守护程序线程都停止运行,或者
  • System.exit(exitCode)称为

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

不要忘记,即使你的main()方法返回,程序也将继续运行,直到不再运行非守护进程线程。VM 中运行的任何线程都可以选择显式退出。

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


答案 2

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

Java设计人员可以创建返回的方法,以便JVM可以将此值作为进程退出代码报告给操作系统。但是他们决定使主要无效,但提供可以使用更新此代码的API。此解决方案的优点是程序可以决定在任何点和任何线程中退出,而不仅仅是在 main 方法和主线程中。main()intSystem.exit(exitCode)


推荐