在异常处理中覆盖toString()

时间:2014-12-21 13:23:30

标签: java tostring override

public class ExcepHand  {
    public String toString()
    {
        return "Exception Occured";
    }
    public static void main(String args[])
    {
        int a=10;
        int b=0;
        try
        {
            int c=a/b;
        }
        catch(ArithmeticException e)
        {
            System.out.println(e);
        }
    }
}

这给了我一个输出java.lang.ArithmeticException: / by zero。我想知道为什么toString()方法没有被覆盖。如果可以这样做,请告诉我该怎么做。

3 个答案:

答案 0 :(得分:2)

您更改了toString()课程的ExcepHand,而不是toString()课程的java.lang.ArithmeticException

如果你想写另一条日志消息,你可以简单地写一个字符串,如果你捕获了ArithmeticException。

Exceptionhandling的一些想法:

你捕到一个异常,如果你简单地记录消息,你将失去行和类的信息。您应该首先致电printStacktrace()

稍后您应该开始查看日志记录框架,例如log4jjava.util.logging

答案 1 :(得分:1)

您需要以下内容:

try {
    int c=a/b;
}
catch(ArithmeticException e) {
    System.out.println(new ExcepHand());//it will automatically call toString of you ExceptHand object but an ugly way to do it.
}

您正在调用ArithmeticException的String方法而不是ExcepHand。

答案 2 :(得分:1)

您正在覆盖toString()个实例的ExcepHand方法。您的异常是ArithmeticException的一个实例,与您的班级无关。

要调用您自己的toString()方法,请更改代码以创建ExcepHand的新实例:

catch(ArithmeticException e) {
    System.out.println(new ExcepHand()); // prints "Exception Occured"
    System.out.println(e); // prints "java.lang.ArithmeticException: / by zero"
}

您还可以扩展ArithmeticException以围绕原始ArithmeticException消息包装您自己的消息:

public class ExcepHand extends ArithmeticException {
    private static final String messageTemplate = "Exception Occured: %s";

    public ExcepHand() {
        this("");
    }

    public ExcepHand(String s) {
        super(String.format(messageTemplate, s));
    }

    public static void main(String args[]) {
        int a = 10;
        int b = 0;
        try {
            int c = a / b;
        } catch (ArithmeticException e) {
            System.out.println(new ExcepHand(e.getMessage()));
        }
    }
}

这将打印:

ExcepHand: Exception Occured: / by zero

或使用System.out.println(new ExcepHand(e.toString()));获取:

ExcepHand: Exception Occured: java.lang.ArithmeticException: / by zero