如何修改异常的getMessage?

时间:2014-11-07 18:47:31

标签: java exception

我需要更改方法getMessage()的返回消息, 例如,我有一个ArithmeticException,当我写:

try{c=a/0;}
catch(ArithmeticException excep){System.out.println( excep.getMessage() );}

我执行了这个代码: / by zero。

所以,我想通过覆盖getMesage方法来改变这个结果。 我创建了一个名为 MyException 的新类, ArithmeticExceprtion 继承,我覆盖方法 getMessage < / strong>,之后我将上一个代码中的异常类型从 ArithmeticException 更改为我的新名称类 MyException

public class MyException extends ArithmeticException{
    @override
    public String getMessage(){
       retun "new code message";}

} 我已经改变了第一个代码,我已经改变了:

try{c=a/0;}
catch(MyException excep){System.out.println( excep.getMessage() );}

当我执行此代码时,我有同样的错误消息,好像我没有捕获异常:

Exception in thread "main" java.lang.ArithmeticException: / by zero
     at main.test.main(Test.java:33)

所以,我的问题是:如何更改methode getMessage()的消息?

1 个答案:

答案 0 :(得分:1)

您已使用名为ArithmeticException的新类扩展了MyException。但是c = a / 0;语句仍然会引发ArithmeticException但从不引发MyException本身,因此未达到catch条款。

请注意,通常您不应该捕获ArithmeticException之类的运行时(未检查)异常,因为它表示编程错误。另请注意,对于已检查的异常,编译器会显示一条错误,告诉您该语句永远不会抛出此类异常,但在这种情况下,MyException是一个未经检查的异常,因此编译器可以正常使用它。

在您的特定情况下,您无法更改异常消息,因为它始终是ArithmeticException。但是,您始终可以在catch子句中打印所需的任何消息。或者您可以将语句包装在方法中,并让该方法抛出子类异常:

public void foo() throws MyException {
   try {
        c = a / 0;
   } catch (ArithmeticException excep) {
        // handle excep
        throw new MyException();
   }
}