main() 方法的 Java 应用程序退出代码究竟是如何工作的?
How exactly works the Java application exit code of the main() method?
我对一个简单的命令行 Java 应用程序有以下疑问。
所以我有这个由 main()
方法启动的命令行应用程序 Main class.像往常一样,这个 main()
方法是用这个签名定义的:
public static void main(String[] args) {
它的 return 类型是 void
,这应该意味着它没有 return 任何值。但是当它的执行正确终止时,我在 IntelliJ 控制台中收到以下消息。
Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket'
Process finished with exit code 0
exit code 0
究竟代表什么?我认为这意味着程序已正确执行,没有发生任何错误。
所以现在我有以下2个疑惑:
如果是真的,如果我的 main()
方法 return void
为什么会发生?
如果我的应用程序以错误结束,我如何 return 不同的退出代码?
是否有以错误结尾的标准退出代码值?
虚拟机在
时退出
- 所有非守护线程停止 运行,或
System.exit(exitCode)
被称为
在第一种情况下,退出代码为 0。在第二种情况下,它是传递给 exit()
方法的退出代码。
不要忘记,即使您的 main() 方法 returns,程序也会继续 运行 直到不再有非守护线程运行。 VM 中的任何线程 运行 都可以选择显式退出。
退出代码 0 表示一切按预期进行。您可以选择使用任何其他退出代码向环境发出异常情况信号。
进程的退出代码是进程向操作系统报告的错误代码。
Java 设计者 可以 为 return int
制作 main()
方法,以便 JVM 可以向 OS 此值作为进程退出代码。但他们决定让 main 无效,但提供 API 可以使用 System.exit(exitCode)
更新此代码。这种解决方案的优点是程序可以在任何点和任何线程中决定退出,而不仅仅是在主方法和主线程中。
退出代码 0 表示它正常完成,这是所有进程的标准,而不仅仅是 java。该值不是从 main 方法(它是空的)返回的,而是从 JVM 本身返回的。
可以指定不同的值,例如System.exit(1)
指示某些错误情况,程序停止。
我对一个简单的命令行 Java 应用程序有以下疑问。
所以我有这个由 main()
方法启动的命令行应用程序 Main class.像往常一样,这个 main()
方法是用这个签名定义的:
public static void main(String[] args) {
它的 return 类型是 void
,这应该意味着它没有 return 任何值。但是当它的执行正确终止时,我在 IntelliJ 控制台中收到以下消息。
Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket'
Process finished with exit code 0
exit code 0
究竟代表什么?我认为这意味着程序已正确执行,没有发生任何错误。
所以现在我有以下2个疑惑:
如果是真的,如果我的
main()
方法 returnvoid
为什么会发生?如果我的应用程序以错误结束,我如何 return 不同的退出代码?
是否有以错误结尾的标准退出代码值?
虚拟机在
时退出- 所有非守护线程停止 运行,或
System.exit(exitCode)
被称为
在第一种情况下,退出代码为 0。在第二种情况下,它是传递给 exit()
方法的退出代码。
不要忘记,即使您的 main() 方法 returns,程序也会继续 运行 直到不再有非守护线程运行。 VM 中的任何线程 运行 都可以选择显式退出。
退出代码 0 表示一切按预期进行。您可以选择使用任何其他退出代码向环境发出异常情况信号。
进程的退出代码是进程向操作系统报告的错误代码。
Java 设计者 可以 为 return int
制作 main()
方法,以便 JVM 可以向 OS 此值作为进程退出代码。但他们决定让 main 无效,但提供 API 可以使用 System.exit(exitCode)
更新此代码。这种解决方案的优点是程序可以在任何点和任何线程中决定退出,而不仅仅是在主方法和主线程中。
退出代码 0 表示它正常完成,这是所有进程的标准,而不仅仅是 java。该值不是从 main 方法(它是空的)返回的,而是从 JVM 本身返回的。
可以指定不同的值,例如System.exit(1)
指示某些错误情况,程序停止。