我对一个简单的命令行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
?如果我的应用程序以错误结束,我如何返回不同的退出代码?
是否有以错误结尾的标准退出代码值?
时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)
,以指示某些错误条件,并且程序停止。