2 zyf4005 zyf4005 于 2016.04.24 17:56 提问

java中的getMessage()和toString()有啥区别?见下代码
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;
   }
}

3个回答

hgq0916
hgq0916   2016.04.25 12:49
已采纳

你没有重写toString方法,因此这里调用的toString方法是父类的方法,即Throwable类的方法,查看api文档可知, Throwable的toString方法调用了当前对象的 getLocalizedMessage方法,这个方法也是 Throwable类的方法, 对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。总之,toString方法调用了 getMessage方法,因此返回与 getMessage方法一样的内容。

zyf4005
zyf4005 谢谢啊!toString public String toString()返回此 throwable 的简短描述。结果是以下字符串的串联: 此对象的类的 name ": "(冒号和一个空格) 调用此对象 getLocalizedMessage() 方法的结果 如果 getLocalizedMessage 返回 null,则只返回类名称。 覆盖: 类 Object 中的 toString 返回: 该 throwable 的字符串表示形式。
一年多之前 回复
w172087242
w172087242   Ds   Rxr 2016.04.24 18:15

toString是每个对象都有的方法,也可以重写toString方法;
在异常中toString和getMessage都是表示展示异常的基本信息。

如果你不想要toString和getMessage一样,那么你可以自定义异常,然后继承Exception,
在你自定义的异常中,重写toString,让toString指向你的错误堆栈信息,而不是基本错误信息。

异常的基本错误信息可以在生成异常的时候放入:
如new IOException("基本错误信息");
getMessage就表示你new的时候的值;
而错误堆栈则需要一步步跟踪。

hgq0916
hgq0916   2016.04.25 12:51

你没有重写toString方法,因此这里调用的toString方法是父类的方法,即Throwable类的方法,查看api文档可知, Throwable的toString方法调用了当前对象的 getLocalizedMessage方法,这个方法也是 Throwable类的方法, 对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。总之,toString方法调用了 getMessage方法,因此返回与 getMessage方法一样的内容。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!