为什么要扩展Exception类?

时间:2012-05-25 08:56:35

标签: java

我遇到了一个扩展Exception的类:

public class MyException extends Exception
{
    public MyException()
    {
        super();
    }

    public MyException(final String argMessage, final Throwable argCause)
    {
        super(argMessage, argCause);
    }

    public MyException(final String argMessage)
    {
        super(argMessage);
    }

    public MyException(final Throwable argCause)
    {
        super(argCause);
    }


}

这种方式是不是没有意义的扩展异常,因为所有重写的构造函数都只是调用超类Exception?

3 个答案:

答案 0 :(得分:10)

不,这不是没有意义的。您可以catch以这种方式处理特定异常并专门处理它,而不是捕获一般Exception,这可能无法在所有情况下处理。

有了这个,你可以这样做:

try { 
  foo();
} catch (MyException e) {
  handleMyException(e);
}

如果您不知道如何处理一般Exception,则无法做到这一点,但您可以更好地处理MyException

它还提高了可读性 - 最好将方法声明为throws MyException(通常名称更好),然后throws Exception - 你知道这样做会更好。

答案 1 :(得分:5)

是的,这是有原因的。它允许您区分异常的类型。

假设以下代码:

try {
    // some instructions
} catch (MyFirstException firstException) {
    // Handler for the first exception
} catch (MySecondException secondException) {
    // Handler for the first exception
} catch (Exception exception) {
    // Handler for all other exceptions
}

如果MyFirstExceptionMySecondException继承自Exception并覆盖所有方法,则可以在catch块中区分它们。因此,您可以为两个例外使用不同的处理程序。

答案 2 :(得分:0)

当你总是做catch (Exception e)时,你实际上会抓住Exception的每个子类,这也特别适用于你通常不想捕捉的RuntimeException。这只能通过捕捉Throwable

来加剧