A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tinck 中级黑马   /  2014-5-11 00:40  /  1200 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class FuShuException extends Exception //getMessage();
  2. {
  3.         private int value;

  4.        
  5.         private String message;
  6.         Throwable(String message)
  7.         {
  8.                 this.message = message;
  9.         }

  10.         public String getMessage()
  11.         {
  12.                 return message;
  13.         }
  14.        
  15.        

  16. }



  17. class Demo
  18. {
  19.         int div(int a,int b)throws FuShuException
  20.         {
  21.                 if(b<0)
  22.                         throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。

  23.                 return a/b;
  24.         }
  25. }


  26. class  ExceptionDemo3
  27. {
  28.         public static void main(String[] args)
  29.         {
  30.                 Demo d = new Demo();
  31.                 try
  32.                 {
  33.                         int x = d.div(4,-9);
  34.                         System.out.println("x="+x);               
  35.                 }
  36.                 catch (FuShuException e)
  37.                 {
  38.                         System.out.println(e.toString());
  39.                         //System.out.println("除数出现负数了");
  40.                         System.out.println("错误的负数是:"+e.getValue());
  41.                 }
  42.                
  43.                

  44.                 System.out.println("over");

  45.         }
  46. }
复制代码
为什么e.toString()调用了getMessage()?

3 个回复

倒序浏览
在你调用e.toString()之前就抛出了一个FuShuException 异常,这就需要一个FuShuException 对象e,而toString 是用来打印对象信息的,所以调用getMessage()来获取message字符串信息
回复 使用道具 举报
catch中负责处理异常,当异常发生,调用e.toString,从而调用到FuShuException中的getMessage方法。通过toString变成字符串形式,再打印出来。
回复 使用道具 举报
终于想明白了
  1. class fushu
  2. {
  3.         private String message;
  4.         fushu(String message)
  5.         {
  6.                 this.message=message;
  7.         }
  8.         public String getMessage()
  9.         {
  10.                 return message;
  11.         }
  12. }
  13. class demo
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 fushu f=new fushu("sasdas");
  18.                 System.out.println(f.toString());
  19.                
  20.         }
  21. }
复制代码

如果这样toString是不会调用getMessage()的,必须先继承Throwable或Exception。Throwable中的toString覆盖了Object中的toString。
  1. public String toString()
  2. {
  3.         打印此对象的类的 name
  4.         打印": "(冒号和一个空格)
  5.         调用此对象 getLocalizedMessage()
  6.         {
  7.                 对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。
  8.         }
  9.         如果 getLocalizedMessage 返回 null,则只返回类名称。
  10. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马