对于一个简单的命令行Java应用程序,我有以下疑虑。
因此,我有一个命令行应用程序,它由在主类中定义的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
是否有以错误结尾的标准退出代码值?
发布于 2015-02-26 17:14:58
虚拟机在下列情况下退出
当所有非守护程序线程停止运行时,or
System.exit(exitCode)
被称为在第一种情况下,退出代码为0。在第二种情况下,它是传递给exit()
方法的退出代码。
不要忘记,即使main()方法返回,程序也会继续运行,直到不再运行非守护进程线程。并且在VM中运行的任何线程都可以选择显式退出。
退出代码0表示一切按预期进行。您可以选择使用任何其他退出代码向环境发出异常情况的信号。
发布于 2015-02-26 17:17:11
进程的退出代码是进程向操作系统报告的错误代码。
Java设计者可以让main()
方法返回int
,这样虚拟机就可以将这个值作为进程退出代码报告给OS。但他们决定让main无效,但提供可以使用System.exit(exitCode)
更新此代码的应用程序接口。这种解决方案的优点是,程序可以决定在任何点在任何线程中退出,而不仅仅是在main方法和主线程中退出。
发布于 2015-02-26 17:18:25
退出代码为0表示正常完成,这是所有进程的标准,而不仅仅是java。值不是从main方法(它是void)返回的,而是从JVM本身返回的。
可以指定一个不同的值,例如System.exit(1)
来指示某些错误条件,然后程序停止。
https://stackoverflow.com/questions/28738307
复制相似问题