cod*_*ons 2 java exception try-catch
我有一个方法抛出异常
public int myMethod throws Exception
Run Code Online (Sandbox Code Playgroud)
我有另一个函数调用myMethod函数和hava try-catch块.我抛出一个运行时异常来强制终止程序.这是终止程序的正确方法吗?如果我这样做,它会打印两次堆栈跟踪,而RuntimeException的堆栈跟踪是无用的.
在打印完整堆栈跟踪的情况下,在catch子句中终止程序的建议方法是什么?
public int callMyMethod(){
try{
myMethod();
}
catch(Exception ex){
ex.printStackTrace(System.out);
throw new RuntimeException();
}
}
Run Code Online (Sandbox Code Playgroud)
答案是"它取决于".
如果此代码是应用程序本身的一部分,则调用System.exit(int)可能是最佳选择.(但是如果应用程序"失败",那么你应该exit使用非零返回码调用.零通常意味着"成功".)
但是,如果此代码很可能在较大的Java应用程序中嵌入/重用,则调用System.exit(...)是有问题的.例如,System.exit(...)在发生不良事件时调用的库将对使用它的应用程序造成严重破坏.
对于类似的东西,您可能抛出一个自定义的运行时异常,您可以在main方法中捕获并专门处理它.(如果我这样做,我会将Exception构造函数参数传递给自定义异常...并使其成为cause异常.并且我不打印它/记录它.)
(System.exit(...)当你进行单元测试时,调用也会导致问题...'因为调用很可能会拉动运行测试套件的JVM上的插件!)
另一点是,这catch (Exception ...)几乎总是一个不好的想法.关键在于,这几乎可以捕捉到所有东西(包括你梦寐以求的各种事物!)并埋葬它们.捕获您期望的特定异常(例如检查异常)并且可以处理......并且让其余的以正常方式传播更好.
如果你catch (Exception ...)因为你正在使用被宣称为投掷的东西而被困,那么Exception处理它的最好方法就是改变throws Exception.而且越快越好.更改throws Exception以声明您希望该方法抛出的(更多)特定异常的列表.
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |