黑马程序员技术交流社区

标题: 自定义异常的疑惑 [打印本页]

作者: 付江涛    时间: 2014-3-22 21:18
标题: 自定义异常的疑惑
本帖最后由 付江涛 于 2014-3-24 01:05 编辑
搞不懂调用Exception的getMessage方法,怎么个流程

疑惑+疑惑

希望能帮忙解答一下,最好能说贴一下代码,说一下流程


作者: 付江涛    时间: 2014-3-22 22:56
自己动手丰衣足食,再论坛查了很多,感觉思路有点清晰了
作者: 歌癫    时间: 2014-3-22 23:52
java的异常体系中的基类是Throwable,Exception和Error是它的直接已知子类。Exception类中直接是继承了父类Throwable中的getMessage()方法。
public String getMessage()---------------这个是Throwable中的getMessage()方法,返回一个指定的详细信息;这个信息通过Throwable的构造函数Throwable(String message)获得。
Exception是Throwable的子类,其getMessage()方法也是继承来的;
你自己自定义异常继承Exception类,调用getMessage()方法,也是这么个流程 。
作者: 付江涛    时间: 2014-3-23 09:22
歌癫 发表于 2014-3-22 23:52
java的异常体系中的基类是Throwable,Exception和Error是它的直接已知子类。Exception类中直接是继承了父类 ...

Throwable(String message) 中的message只是一个参数名,就是自己传入新的异常信息,然后通过getMessage获取。

Exception也有Exception(String message) 构造函数,同时又继承了Throwable中的getMessage方法

  1. class FuShuException extends Exception //成为异常,继承体系,具备异常特性
  2. {

  3.         FuShuException(String msg)
  4.         {
  5.                 super(msg); // 等于将msg的值出入Exception(String message) ,
  6.         }
  7.        
  8. }
  9. class Demo
  10. {
  11.         int div(int a,int b)throws FuShuException
  12.         {
  13.                 if (b<0)
  14.                 {
  15.                         throw new FuShuException("出现了除数是负数的情况 / by fushu"); // 抛出异常
  16.                 }
  17.                 return a/b;       
  18.         }
  19. }

  20. class ExceptionDemo3
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 Demo d=new Demo();
  25.                 try
  26.                 {
  27.                         int x=d.div(4,-1);
  28.                         System.out.println("x="+x);
  29.                 }
  30.                 catch (FuShuException e)  // FuShuException e = new FuShuException
  31.                 {
  32.                         System.out.println("toString:"+e.toString()); //调用的toString方法是 Exception继承Throwable的
  33.                         System.out.println("除数出现负数了");
  34.                         System.out.println("getMessage:"+e.getMessage()); //调用父类Exception的getMessage方法,Exception的方法也是继承Throwable的
  35.                 }
  36.                

  37.                 System.out.println("over");
  38.         }
  39. }
复制代码
对不对?



作者: yanzhendong    时间: 2014-3-23 15:40
楼主好,异常类中有一个保存异常信息的String变量,当我们通过throw 抛出异常时,异常类构造函数中的String参数就保存在这个变量中,getmessage()函数就是返回这个变量中的数据,
作者: 付江涛    时间: 2014-3-23 16:00
yanzhendong 发表于 2014-3-23 15:40
楼主好,异常类中有一个保存异常信息的String变量,当我们通过throw 抛出异常时,异常类构造函数中的String ...

嗯  我上面分析的对了吧
作者: 歌癫    时间: 2014-3-23 20:25
付江涛 发表于 2014-3-23 09:22
Throwable(String message) 中的message只是一个参数名,就是自己传入新的异常信息,然后通过getMessage ...

很好,看来你已经理解这个问题了。祝贺你!:)
作者: 付江涛    时间: 2014-3-24 00:56
本帖最后由 付江涛 于 2014-3-24 01:06 编辑
歌癫 发表于 2014-3-23 20:25
很好,看来你已经理解这个问题了。祝贺你!


嗯嗯   你写的很好理解   多谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2