捕获
然后还抛出
如下所示的异常
有什么意义?两者都做是不好的做法吗?
try{
//something
} catch (Exception e){
throw new RuntimeException("reason for exception");
}
最佳答案
通常,此类代码用于重新包装异常,这意味着转换异常的类型。通常,当方法中允许的异常受到限制时,您可以执行此操作,但内部可能会发生其他类型的异常。例如:
class MyServiceImplementaiton implements MyService {
void myService() throws MyServiceException { // cannot change the throws clause here
try {
.... // Do something
} catch(IOException e) {
// re-wrap the received IOException as MyServiceException
throw new MyServiceException(e);
}
}
}
这种习惯用法能够不断向调用者传播异常,同时符合接口(interface)中的 throws 子句并隐藏内部细节(IOException 可能发生的事实)。
实际上,这总是比仅仅调用 e.printStackTrace()
更好,后者实际上会“吞掉”错误条件并让程序的其余部分像什么都没发生一样运行。在这方面,Eclipse 的行为非常糟糕,因为如果开发人员不小心,它往往会自动编写此类不良实践构造。
关于Java:在一个 block 中使用 Catch 和 throws?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341926/