class ZiDingYiChang
{
public static void main(String[] args)
{
Demo a = new Demo();
try
{
int b=a.div(4,-2);
System.out.println(b);
}
catch (FuShuException e)
{
System.out.println(e.toString());//為什麼說這裡的toString()方法自動調用下面的getMessage()方法?
}
System.out.println("Hello World!");
}
}
class FuShuException extends Exception
{
private String str;
FuShuException(String str)
{
this.str=str;
}
public String getMessage()
{
return str;
}
}
class Demo
{
int div(int x,int y) throws FuShuException
{
if (y<0)
{
throw new FuShuException("除數為負數,運算失敗");
}
return x/y;
}
}
你沒有重寫toString方法,因此這裡調用的toString方法是父類的方法,即Throwable類的方法,查看api文檔可知, Throwable的toString方法調用了當前對象的 getLocalizedMessage方法,這個方法也是 Throwable類的方法, 對於不重寫此方法的子類,默認實現返回與 getMessage() 相同的結果。總之,toString方法調用了 getMessage方法,因此返回與 getMessage方法一樣的內容。