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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王鹏 中级黑马   /  2013-3-17 16:31  /  1255 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-王鹏 于 2013-3-17 19:30 编辑
  1. /*毕老师用电脑上课。
  2. 开始思考上课中出现的问题。
  3. 比如问题是
  4.         电脑蓝屏。
  5.         电脑冒烟。
  6. 要对问题进行描述,封装成对象。
  7. 可是当冒烟发生后,出现讲课进度无法继续。
  8. 出现了讲师的问题:课时计划无法完成*/
  9. class LanPingException extends Exception
  10. {
  11.         LanPingException(String message)
  12.         {
  13.                 super(message);
  14.         }
  15. }
  16. class MaoYanException extends Exception
  17. {
  18.         MaoYanException(String message)
  19.         {
  20.                 super(message);
  21.         }
  22. }
  23. class NoPlanException extends Exception
  24. {
  25.         NoPlanException(String msg)
  26.         {
  27.                 super(msg);
  28.         }
  29. }
  30. class Computer
  31. {
  32.         private int state = 3;
  33.         public void run()throws LanPingException,MaoYanException
  34.         {
  35.                 if(state==2)
  36.                         throw new LanPingException("蓝屏了");
  37.                 if(state==3)
  38.                         throw new MaoYanException("冒烟了");
  39.                 System.out.println("电脑运行");
  40.         }
  41.         public void reset()
  42.         {
  43.                 state = 1;
  44.                 System.out.println("电脑重启");
  45.         }
  46. }
  47. class Teacher
  48. {
  49.         private String name;
  50.         private Computer cmpt;
  51.         Teacher(String name)
  52.         {
  53.                 this.name = name;
  54.                 cmpt = new Computer();
  55.         }
  56.         public void prelect()throws NoPlanException
  57.         {
  58.                 try
  59.                 {
  60.                         cmpt.run();                        
  61.                 }
  62.                 catch (LanPingException e)
  63.                 {
  64.                         cmpt.reset();
  65.                 }
  66.                 catch (MaoYanException e)
  67.                 {
  68.                         test();
  69.                         throw new NoPlanException("课时无法继续"+e.getMessage());        
  70.                 }
  71.                 System.out.println("讲课");
  72.         }
  73.         public void test()
  74.         {
  75.                 System.out.println("练习");
  76.         }
  77. }
  78. class ExceptionTest
  79. {
  80.         public static void main(String[] args)
  81.         {
  82.                 Teacher t = new Teacher("毕老师");
  83.                 try
  84.                 {
  85.                         t.prelect();
  86.                 }
  87.                 catch (NoPlanException e)
  88.                 {
  89.                         System.out.println(e.toString());
  90.                         System.out.println("换老师或者放假");
  91.                 }        //运行结果:当state=1时,电脑运行  讲课
  92.         } //运行结果:当state=2时,电脑重启  讲课
  93. }//运行结果:当state=3时,练习  NoPlanException:课时无法继续  换老师或者放假
  94. //问题:我不明白程序是怎么调用NoPlanException并显示在屏幕中的?
复制代码
问题:我不明白程序是怎么调用NoPlanException并显示在屏幕中的?

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 blackcaismine 于 2013-3-17 17:11 编辑

当 t.prelect();运行时,t是Teacher的实例,那么Teacher类中的prelect方法中cmpt.run()的cmpt又是Computer的实例,那么再看Computer类中的run方法是怎么写的,

  1. if(state==3)
  2.         throw new MaoYanException("冒烟了");
复制代码
当state为3的时候,就抛出冒烟的异常,那么cmpt抛出这个MaoYanException("冒烟了");异常之后,被prelect()方法中

  1. catch (MaoYanException e)
  2.                 {
  3.                         test();
  4.                         throw new NoPlanException("课时无法继续"+e.getMessage());        
  5.                 }
复制代码
捕捉到了,那么t也就再次抛出NoPlanException("课时无法继续"+e.getMessage());    这个异常,主函数中的

  1. catch (NoPlanException e)
  2.                 {
  3.                         System.out.println(e.toString());
  4.                         System.out.println("换老师或者放假");
  5.                 }
复制代码
就会捕捉到这段异常,然后就直接打印结果了。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

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