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

时间:2015-02-26 09:10:30

标签: java main exit-code

我对以下简单的命令行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. 如果我的应用程序以错误结束,如何返回不同的退出代码?

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

3 个答案:

答案 0 :(得分:25)

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

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

不要忘记,即使你的main()方法返回,程序也会继续运行,直到没有非守护程序线程运行为止。并且在VM中运行的任何线程都可以选择明确退出。

退出代码0表示一切都按预期进行。您可以选择使用任何其他退出代码来向环境发出特殊情况。

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

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

可以指定不同的值,例如System.exit(1)表示某些错误情况,程序停止。