Java 中的异常包装是什么?

2022-09-04 01:59:06

Java 中的异常包装是什么?它在异常处理中有何用处?它与异常传播有何不同?


答案 1

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:首先从堆栈的顶部引发异常,如果未捕获,则会将调用堆栈下拉到上一个方法,如果未在此处捕获,则异常再次向下下降到上一个方法,依此类推,直到它们被捕获或到达调用堆栈的最底部。

资料来源:http://www.javatpoint.com/exception-propagation


答案 2

我认为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
}

而不是担心经理可能出错的细粒度细节。