Java 中的异常包装是什么?
Java 中的异常包装是什么?它在异常处理中有何用处?它与异常传播有何不同?
Exception wrapping
是在捕获异常时,将其包装在其他异常中并引发该异常。下面是一个示例:
try{ dao.readPerson(); } catch (SQLException sqlException) { throw new MyException("error text", sqlException); }
资料来源:http://tutorials.jenkov.com/java-exception-handling/exception-wrapping.html
另一方面
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);
}
}
}
这样,客户端只需执行以下操作:
try {
manager.sendPerson();
} catch (ManagerException e) {
// Handle fail by manager
}
而不是担心经理可能出错的细粒度细节。