我对这两个主题非常不确定。我知道我应该使用multi-catch来处理需要以相同方式处理的异常。但出于什么目的,我真的需要这样的东西。
private void something(String name) throws IOException, RemoteException {
try {
...
} catch (Exception ex) {
... // do something
throw ex;
}
}
答案 0 :(得分:3)
如果您考虑使用此方法,那么在执行期间抛出的任何异常都应以相同的方式处理,并且您希望在将异常传播到客户端之前执行任务,则可以执行此操作
例如,假设您希望在发生异常时执行特定处理,例如记录信息。所以你抓住它来完成这项任务 尽管如此,您认为捕获的异常是一个问题,并且记录它不是异常的“真实”处理。所以,你通过重新抛出它来让它传播。
答案 1 :(得分:2)
<强>重新抛出强>
每当您想要通知调用者方法有关异常时,您都会捕获并重新抛出异常。
说一些方法callSomething()正在调用你的方法()。如果在something()内发生任何异常,它将只捕获异常,因此应用程序不会失败,并将其重新抛出到callSomething()方法。然后callSomething()将通知客户端内部错误。
其他示例是,在MVC模式中,客户端提交的请求由来自控制器的某些方法基于请求映射提供。控制器将调用服务,服务将与dao的某些方法交互。如果在DAO中发生了一些异常,那么DAO将重新抛出异常服务,服务将重新抛出到控制器,并且它是控制器,它将通知客户端有关错误消息。 这在java中称为异常传播。 异常从一个方法传播到另一个方法,直到它被捕获。
多次捕获
如果要对多种类型的异常执行相同的操作,则使用multi catch。
答案 2 :(得分:2)
您需要在以下情况下重新抛出
finally
块中进行预处理。catch(Exception ex)
并将其重新抛出为throw new RuntimeException(ex)
。JDBC
异常转换为Spring自定义异常。Talend
生成的Java代码中使用了这个。