我对以下简单的命令行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
究竟代表什么?我认为这意味着程序已正确完成其执行而不会产生任何错误。
所以现在我有以下两个疑问:
如果我的 main()
方法返回 void
,为什么会这样?
如果我的应用程序以错误结束,如何返回不同的退出代码?
是否有以错误结尾的标准退出代码值?
答案 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)
表示某些错误情况,程序停止。