java:重新触发捕获的异常

java:重新触发捕获的异常,java,exception-handling,Java,Exception Handling,我想捕获一个SQLException,发送一些邮件,然后将异常发送到下一个目标。我的子类如下: class myexception extends SQLException { public myexception( Throwable cause ) throws SQLException { super( cause ); ... send mail ... throw new SQLException( cause );

我想捕获一个SQLException,发送一些邮件,然后将异常发送到下一个目标。我的子类如下:

class myexception extends SQLException {
    public myexception( Throwable cause ) throws SQLException {
        super( cause );

        ... send mail ...

        throw new SQLException( cause );
    }
}
如果我包装了一个抛出SQLException('connect()'或类似内容)的现有函数:


我可以重新显示原始SQLException吗,还是需要将其解压缩并创建一个新的SQLException?IE是我的类在调用throw new SQLException(原因)时将生成运行时错误

我不明白为什么不可能,但您需要捕获SQLException:

try{
    try{
        someCall();
    }
    catch(myException e) {

    }
}
catch(SQLException e) {
    // catches the thrown SQLException 
    //created by new myException(Throwable clause)
}

我不明白为什么不可能,但您需要捕获SQLException:

try{
    try{
        someCall();
    }
    catch(myException e) {

    }
}
catch(SQLException e) {
    // catches the thrown SQLException 
    //created by new myException(Throwable clause)
}

在我看来,不应该使用异常来实现业务或框架逻辑(例如“创建时发送电子邮件”)

应该使用实际的框架本身来实现这一点

例如,如果您在控制反转(Inversion of Control,IoC)容器(如spring)中管理所有软件组件,并且每次抛出特定异常时都希望执行“操作”(如发送电子邮件),则可以使用面向方面的编程技术

使用这种声明性构造,您可以针对某些方法,拦截抛出SQLException的情况,然后执行逻辑


在发送电子邮件的情况下,我会亲自创建一个队列或其他东西,以便在发送电子邮件时不会中断主代码的执行

在我看来,不应使用异常来实现业务或框架逻辑(例如“创建时发送电子邮件”)

应该使用实际的框架本身来实现这一点

例如,如果您在控制反转(Inversion of Control,IoC)容器(如spring)中管理所有软件组件,并且每次抛出特定异常时都希望执行“操作”(如发送电子邮件),则可以使用面向方面的编程技术

使用这种声明性构造,您可以针对某些方法,拦截抛出SQLException的情况,然后执行逻辑


在发送电子邮件的情况下,我会亲自创建一个队列或其他东西,以便在发送电子邮件时不会中断主代码的执行

try {
    sqlCall();
} catch (SQLExcetion e) {
    sendMail();

    throw e;
}

您不需要子类化
SQLException

有一种更简洁的方法来完成您正在尝试的任务

try {
    sqlCall();
} catch (SQLExcetion e) {
    sendMail();

    throw e;
}

您不需要子类化
SQLException

非常好的一点。事后看来,这一切都更安全。(取出橡皮擦)-开始(反)编码的时间到了。非常好。事后看来,这一切都更安全。(取出橡皮擦)-开始(反)编码的时间。