我对这两个话题很不确定。我知道,对于需要以同样的方式处理的异常,我应该使用多重捕获。但为了什么目的我真的需要这样的东西。
private void something(String name) throws IOException, RemoteException {
try {
...
} catch (Exception ex) {
... // do something
throw ex;
}
}发布于 2017-04-17 12:31:36
如果考虑到此方法在执行过程中引发的任何异常都应以相同的方式处理,并且在允许将异常传播到客户端之前要执行任务,则可以这样做。
例如,假设您希望在异常发生时执行特定处理,例如记录信息。所以你抓住它来完成这个任务。
尽管如此,您仍然认为捕获的异常是一个问题,记录它并不是对异常的“真正”处理。所以,你让它通过重抛传播。
发布于 2017-04-17 12:43:20
ReThrow
每当您想通知调用方异常时,就会捕获并重新抛出异常。
假设某个方法callSomething()正在调用您的方法()。如果某个()内部出现任何异常,它只会捕获异常,因此应用程序不会失败,并将其重新抛给callSomething()方法。然后callSomething()会将内部错误通知客户端。
另一个例子是,在MVC模式中,客户端提交的请求是通过某种基于请求映射的控制器提供的。控制器将调用服务,服务将与某种dao方法交互。如果DAO中出现异常,DAO将重新抛出异常到服务,服务将重新抛给控制器,并由控制器将错误消息通知客户端。这在java中被称为异常传播。异常在调用堆栈上从一个方法传播到另一个方法,直到被捕获为止。
多捕
如果要对多个类型的异常执行相同的操作,则使用多个捕获。
发布于 2017-04-17 12:49:04
您需要在以下情况下重新投递
finally块中进行预处理。catch(Exception ex),并将它们重新抛出为throw new RuntimeException(ex)。JDBC异常转换为Spring自定义异常。Talend生成的Java代码中使用这个方法。https://stackoverflow.com/questions/43451515
复制相似问题