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()
方法没有被覆盖。如果可以这样做,请告诉我该怎么做。
答案 0 :(得分:2)
您更改了toString()
课程的ExcepHand
,而不是toString()
课程的java.lang.ArithmeticException
。
如果你想写另一条日志消息,你可以简单地写一个字符串,如果你捕获了ArithmeticException。
Exceptionhandling的一些想法:
你捕到一个异常,如果你简单地记录消息,你将失去行和类的信息。您应该首先致电printStacktrace()
。
稍后您应该开始查看日志记录框架,例如log4j
或java.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