为什么我们在Java中有退出代码?

时间:2012-12-26 13:46:55

标签: java exit-code

在Java中,我们使用System.exit(int)退出程序。 C中“退出值”的原因是退出值用于检查程序中的错误。但是在Java中,错误会被抛出异常反映出来,因此可以轻松处理它们。那么为什么我们在Java中有退出值呢?

4 个答案:

答案 0 :(得分:13)

退出值被返回给调用程序,例如贝壳。外部程序无法捕获异常。

BTW当你抛出异常时,它被该线程捕获或该线程死亡,仍然为该线程调用finally块。当您调用System.exit()时,所有线程都会立即停止,最后不会调用块。

答案 1 :(得分:3)

出于同样的原因。

退出代码由程序外的各方和应用程序专门用于调试和处理目的。超级应用程序肯定能够比尝试解析堆栈跟踪更好地处理返回代码。

此外,如果您要为最终用户创建应用程序,您宁愿从应用程序中优雅地退出,而不是发布一堆堆栈跟踪信息,原因如下:一,您只会吓唬他们许多看起来很疯狂的技术乱码,以及两个堆栈跟踪通常会从根本上揭示程序结构的敏感和机密信息(让潜在的攻击者更多地了解系统)。

对于一个真实的例子,我正在研究一个Java Batch程序,它使用退出代码来完成它的工作。用户可以根据退出代码是否为“0”来查看作业是否成功执行。如果是其他任何内容,他们可以联系技术支持,并提供退出代码的附加信息,并且服务台将根据退出代码提供所有必要信息以帮助他们。它比试图询问非技术性最终用户要好得多,“好吧,那么你得到的是什么异常?”

答案 2 :(得分:0)

退出值将返回给调用者,以表示程序成功或不成功完成。调用者可能无法捕获异常并相应地处理它。

例如。 0退出值表示成功完成,而非零返回值表示执行中出现一些错误。

此外,System.exit()将使应用程序中的所有线程在该点停止。

答案 3 :(得分:0)

简而言之,退出代码是在运行Java程序时遇到异常的用户的简化信号。由于我们假设大多数用户不理解异常的堆栈跟踪数据,因此这些简单的非零自定义代码会告诉他们出现问题,应该向供应商报告。因此供应商获取代码并且他知道与该代码相关联的堆栈跟踪并尝试修复系统。这是程序员提供的抽象,因此用户不必阅读和报告大量的堆栈跟踪。这里非常好的类比是SQLException类中的getErrorCode()方法。此方法还会关闭客户端计算机上运行的当前JVM。这意味着这将终止JVM中的所有线程。此方法调用类Java.lang.Runtime中的exit方法。如果您转到此方法的文档,您将了解虚拟机是如何关闭的。

这是链接 http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exit%28int%29