我有一个单线程应用程序,如果有问题,应该将DOS错误级别设置为非零。抛出RuntimeException还是使用System.exit(nonzero)更好?我不需要堆栈跟踪,也不希望此应用程序被扩展/重用。这两个选项有什么区别?
除非您确实有特殊情况,否则不要抛出异常。正是出于这个原因,System.exit(int)
在那里。使用它。
编辑:我想我可能误解了您的问题。我以为您是在问,什么时候您想正常退出JVM,但发信号说事情不太正常,是抛出异常还是使用System.exit
更好。
但是,如果发生的问题是Java异常已经表明的问题,最好不处理该异常。您不必捕获异常并调用System.exit
。
如果选择是引发自己的异常还是调用System.exit
,请考虑错误条件是否可以由某些调用您的方法的Java代码来处理。如果错误直接在main
方法中发生,则可能永远不会有调用方来处理该异常,因此您可能应该调用System.exit
。否则,通常最好抛出一个异常-但不是RuntimeException
,您可能应该使用适当表示您遇到的错误的异常类型。如有必要,编写您自己的RuntimeException
子类。
通常,在这种情况下,我可以通过调用System.exit
处理main方法中的所有异常。这使您可以灵活地决定在何处/是否/如何处理异常情况,同时仍可以使用错误代码终止操作。特别是,它使您可以控制返回代码以及可能为用户生成的任何其他输出(错误消息,堆栈跟踪等)。如果在main中引发异常(或让异常转义),则会失去该控制。
抛出的异常将打印出堆栈跟踪,如果不需要,则应使用System.exit。
APP本身应使用System.exit。它是与调用环境(脚本)的接口。当然,任何内部组件都应使用Exception。当您将其放在一起时,可以同时使用它们:
这取决于您要向启动程序的脚本报告多少信息。如果脚本旨在执行一系列动作,那么这可能非常重要。 https://shapeshed.com/unix-exit-codes/
System.exit(num)不是一个好的选择,因为它关闭了JVM,如果您在catch块之后,甚至没有运行finally块。
System.exit()不推荐。它关闭了JVM。