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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马州州 中级黑马   /  2012-7-21 17:36  /  2344 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马州州 于 2012-7-22 00:08 编辑

这个自定义的异常,最后会输出那个造成异常的负数,我想问的是b在程序中走的流程,怎么就被getValue()获取到b的值了
  1. class FuShuException extends Exception
  2. {
  3. private int value;
  4. FuShuException()
  5. {
  6. super();
  7. }

  8. FuShuException(String msg,int value)
  9. {
  10. super(msg);
  11. this.value = value;
  12. }
  13. public int getValue()
  14. {
  15. return value;
  16. }

  17. }

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

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

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


  42. System.out.println("over");
  43. }
  44. }
复制代码
这个自定义的异常,最后会输出那个造成异常的负数
26行代码在抛出自定义一场对象的时候抛出了b
我想问的是b在程序中走的流程,怎么就被getValue()获取到b的值了
把大致的流程给我说下,拜谢了

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

5 个回复

倒序浏览
额~~~发代码不让改颜色。。。
回复 使用道具 举报

  • class FuShuException extends Exception
  • {
  • private int value;
  • FuShuException()
  • {
  • super();
  • }
  • FuShuException(String msg,int value)//msg= "出现了除数是负数的情况--- by fushu"    value=b
  • {
  • super(msg);
  • this.value = value;//相当于this.value=b
  • }
  • public int getValue()
  • {
  • return value;
  • }
  • }
  • class Demo
  • {
  • int div(int a ,int b)throws FuShuException
  • {
  • if (b<0)
  • throw new FuShuException("出现了除数是负数的情况--- by fushu",b);//手动通过throw关键字抛出一个自定义异常对象
  • return a/b;
  • }
  • }
  • class ExceptionDemo3
  • {
  • public static void main(String[] args)
  • {
  • Demo d = new Demo();
  • try
  • {
  • int x = d.div(4,-1);//new FuShuException("出现了除数是负数的情况--- by fushu",b)
  • System.out.println("x="+x);
  • }
  • catch (FuShuException e /*new FuShuException */)//相当于FuShuException e = new  FuShuException("出现了除数是负数的情况--- by fushu",b)
  • {
  • System.out.println(e.toString());
  • System.out.println("被除的负数是:"+e.getValue());
  • }
  • System.out.println("over");
  • }
  • }

b在程序中走的流程是这样的,当执行到第26行,判断b<0为真时,就创建了一个FuShuException 对象,所以用new FuShuException ,并返回到调用这个方法的地方第39行(红色部分)。这行代码是在try{}里,所以这个错误对象就被检测到,并传给了catch(){},catch发现与自己要捕获的错误类型相同(蓝色部分)就它起个名字叫e,相当于 FuShuException e=  new  FuShuException("出现了除数是负数的情况--- by fushu",b)。FuShuException这个类就是你自己定义的异常类在第一行,它在构造时就需要两个参数一个字符串,一个就是int值。所以蓝色部分就把,b作为第二个参数传给了int value(第九行绿色部分),然后赋给了this.value(12行紫色部分)。创建了这个类的对象就可以用这个类里面定义的方法了,所以当执行到第45行,e.getValue()时会调用第一行那个异常类的getValue()方法(第14行)返回b到第45行的e.getValue(),这样b就被打印了。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
遇到知己了!我今天也是看的day9,倒数第二个视频我看了3遍还是跟哥们你一样卡在这个地方了,同求高手帮帮忙~
回复 使用道具 举报
张雪磊 发表于 2012-7-21 18:34
  • class FuShuException extends Exception
  • {
  • private int value;

  • 谢谢了,看的有点明白了,我再琢磨琢磨,讲的这么细致,强烈要求版主给加分啊
    回复 使用道具 举报


    楼主:我将您的代码复制下来,并加以更改,您的这段程序才能得以运行,因为你的16行这段代码和34行代码不完整,导致编译时会报错,你在运行我代码时,将16行的注释部分去掉即可运行。
    对于你的问题:这个自定义的异常,最后会输出那个造成异常的负数26行代码在抛出自定义一场对象的时候抛出了b我想问的是b在程序中走的流程,怎么就被getValue()获取到b的值了。
    首先读main主函数,运行if(b<0),发现抛出了一个异常FhuShuException();然后就走了第一步(如图),这个异常就被try检测到了,发现b小于0为-1,需要对它进行处理,于是就将catch就捕捉到了(走了第二步,如图)。而b为-1,就在16行代码中把-1传给了value,21行拿到了这个-1,最后的54行就将这个拿到的-1值打印了出来。

    由于我得画图工具出现了问题,搞了很长时间,才画了出来,只画了一点点,希望能帮助楼主理解,呵呵!
    有不对的地方,希望指正哈{:soso__8961432591078930798_3:}

    评分

    参与人数 1技术分 +1 收起 理由
    韦念欣 + 1 赞一个!

    查看全部评分

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