java系统。退出(num)或从main引发RuntimeException?
我有一个单线程应用程序,如果出现问题,应该将DOS errorlevel设置为非零。抛出RuntimeException还是使用System更好。退出(非零)?我不需要堆栈跟踪,也不希望这个应用程序被扩展/重用。这两个选项之间有什么区别
你可以在下面搜索框中键入要查询的问题!
我有一个单线程应用程序,如果出现问题,应该将DOS errorlevel设置为非零。抛出RuntimeException还是使用System更好。退出(非零)?我不需要堆栈跟踪,也不希望这个应用程序被扩展/重用。这两个选项之间有什么区别
# 1 楼答案
通常在这种情况下,我会在我的main方法中处理所有异常,可能是通过调用
System.exit
。这为您提供了在何处/是否/如何处理异常情况的灵活性,同时仍然满足了以错误代码终止的需求。特别是,它使您可以控制返回代码和可能为用户生成的任何其他输出(错误消息、堆栈跟踪等)。如果您在main中抛出异常(或让异常转义),您将失去该控制总之,仅在顶级异常处理程序中调用
System.exit
:# 2 楼答案
这取决于要向启动程序的脚本报告多少信息。如果脚本设计为执行一系列操作,那么这一点非常重要https://shapeshed.com/unix-exit-codes/
示例:我开发了一个Java程序,可以调用外部API,下载响应并将其保存到文件中。 可能的结果:
现在我的脚本知道出了什么问题,它可以根据结果采取不同的行动
底线:像任何好的api一样,明确定义输入和输出参数并使用
System.exit
# 3 楼答案
系统。exit(num)不是一个好选项,因为它关闭了JVM,而且如果有after catch块,它甚至没有运行finally块
抛出RuntimeException也可能不是最好的选择,可以像前面提到的那样创建子类,在我看来,这是特定于应用程序的异常可能是更好的选择。 -曼尼什语
# 4 楼答案
抛出的异常将打印出堆栈跟踪,如果不需要,则应使用系统。退出
退出后,您可以使用系统通知用户。out(我假设应用程序仅在commanline环境中运行)
你应该考虑只需在一个单独的日志中记录所有错误,这就保证了在关闭终端时,STATCURTION不会永远丢失。为此,请看一下log4j,它非常易于使用
# 5 楼答案
除非您确实有异常情况,否则不要抛出异常
System.exit(int)
的存在正是因为这个原因。使用它编辑:我想我可能误解了你的问题。我以为您是在问,当您希望正常退出JVM,但表示某些事情不太正常时,抛出异常还是使用
System.exit
更好但是,如果发生的问题已经由Java异常指示,那么可以不处理该异常。您不必捕获异常并调用
System.exit
如果您可以选择是抛出自己的异常还是调用
System.exit
,请考虑错误条件是否可以由调用您的方法的Java代码处理。如果错误直接发生在main
方法中,那么可能永远不会有调用方来处理异常,因此您可能应该调用System.exit
。否则,通常最好抛出一个异常,而不是RuntimeException
,您可能应该使用一个异常类型来适当地表示您遇到的错误。如果需要,编写自己的RuntimeException
子类# 6 楼答案
应用程序本身应该使用系统。出口它是它与调用环境(脚本)的接口。当然,任何内部组件都应该使用异常。当你把它放在一起时,它可以是两个: