在Java中,我们使用System.exit(int)
来退出程序。 C中“退出值”的原因是退出值用于检查程序中的错误。但在Java中,错误通过抛出异常来反映,因此可以轻松处理它们。那么为什么我们有Java的退出值呢?为什么我们在Java中有退出码?
回答
退出值返回给调用程序例如贝壳。异常不能被外部程序捕获。
顺便说一句如果抛出一个异常,它被该线程捕获或该线程死亡,那么该线程仍然会调用finally
块。当你调用System.exit()时,所有的线程立即停止,最后不会调用块。
退出值返回给调用者,表示程序成功或不成功完成。调用者可能无法捕捉异常并相应地处理它。
例如, 0退出值意味着成功完成,而非零返回值意味着执行中出现一些错误。
此外,System.exit()的将应用程序中的所有线程停止在该点本身。
出于同样的原因。
退出代码仅供程序外部的应用程序和应用程序使用,以用于调试和处理目的。超级应用程序确实可以处理返回代码,而不是试图解析堆栈跟踪。另外,如果你正在为一个最终用户创建一个应用程序,那么你应该从你的应用程序中优雅地退出,而不是发布一堆栈跟踪信息,原因有两个:其中一个,你只会吓到它们有很多看起来很疯狂的技术乱码,以及两个堆栈跟踪通常会揭示关于程序基本构造方式的敏感和机密信息(给予潜在攻击者更多关于系统的知识)。
对于真实世界的例子,我正在上使用的退出代码为它工作在Java批处理程序。用户可以根据退出代码是否为“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
- 1. 为什么我的退出
- 2. 为什么'os.system'退出代码为1?
- 3. 为什么我们在JAVA中使用这段代码?
- 4. 为什么不能退出此代码?
- 5. 为什么我们有数组和数组在Java中
- 6. 为什么我的for循环退出?
- 7. 我们为什么要通知退出状态如退出(0),退出(1)的JVM?
- 8. 为什么我的代码在java中输出[email protected]?
- 9. 即使循环条件仍然有效,为什么我的代码以退出代码退出:0?
- 10. 为什么我在Java String中有?
- 11. 为什么这行Java代码会导致我的应用程序退出?
- 12. 为什么我不能退出这个while循环(java)?
- 13. 为什么返回不能在Java中退出函数?
- 14. 为什么我们有Externalizable当我们可以覆盖java中的writeObject和readObject
- 15. 为什么我们需要Java NIO Selector?
- 16. 为什么这个VBA代码退出我的表单?
- 17. 为什么我的Gradle构建死于退出码137?
- 18. 为什么“exec”在此代码中给“孩子退出异常”?
- 19. 为什么在Perl中退出代码255而不是-1?
- 20. 为什么我们在iphone
- 21. 为什么我们在SQL
- 22. 为什么我们在JS
- 23. 为什么我们在java中声明变量为private
- 24. 为什么我们需要java中的私有嵌套接口?
- 25. 为什么Windows.Media.VisualTreeHelper.GetChild(...)退出子?
- 26. 为什么程序退出?
- 27. 为什么PyQt崩溃没有信息? (退出代码0xC0000409)
- 28. 为什么我们在Java 1.6中从FileChannel.map中获取ClosedByInterruptException?
- 29. 为什么有些人在出错时退出-1而不是退出1?
- 30. 为什么我的并发函数在Go中过早退出?
。 –
为什么所有的downvotes? – arshajii
possiblity duplicate http://stackoverflow.com/q/457338/668970 – developer