Nee*_*ain 10
Exception wrapping当您捕获异常时,将其包装在另一个异常中并抛出该异常.这是一个例子:
Run Code Online (Sandbox Code Playgroud)try{ dao.readPerson(); } catch (SQLException sqlException) { throw new MyException("error text", sqlException); }
资料来源:http://tutorials.jenkov.com/java-exception-handling/exception-wrapping.html
另一方面
Exception Propagation:首先从堆栈顶部抛出异常,如果没有捕获,它会将调用堆栈下拉到前一个方法,如果没有捕获,则异常再次下降到前一个方法,依此类推,直到它们为止被抓住或直到他们到达调用堆栈的最底部.
资料来源:http://www.javatpoint.com/exception-propagation
我认为Neeraj的答案是正确的。作为补充,我认为一个特别好的案例是通过抽象异常来管理抛出的异常数量。为了扩展Neeraj的示例:
class Manager {
public void sendPerson() throws ManagerException {
try{
Person person = dao.readPerson();
Socket socket = getSocket();
OutputStream os = socket.getOutputStream();
String personJson = objectMapper.writeValueAs(person);
os.write(personJson);
} catch (SQLException | SocketException | OutputStreamException | SerializationException e) {
throw new ManagerException("error text", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,客户端只需要执行以下操作:
try {
manager.sendPerson();
} catch (ManagerException e) {
// Handle fail by manager
}
Run Code Online (Sandbox Code Playgroud)
而不用担心管理器中可能出问题的详细信息。
一个用例是将受检查的异常转换为运行时异常,反之亦然。
或者它可能只是一个命名的东西。假设您SQLException在代码中的某个时刻捕获了 an ,但您可以推断这是因为用户未登录。然后您可以捕获它并抛出您自己的自定义NotLoggedInException.
| 归档时间: |
|
| 查看次数: |
11589 次 |
| 最近记录: |