黑马程序员技术交流社区

标题: 关于异常处理问题 [打印本页]

作者: HM何伟    时间: 2013-3-30 22:47
标题: 关于异常处理问题
本帖最后由 HM何伟 于 2013-4-1 00:08 编辑

当i=1时,我这个程序怎会出现死循环呢?
  1. /*
  2.         
  3.   老师上课这个问题,用自己的笔记本

  4.   笔记本事物
  5.      开机运行功能
  6.          2个异常,蓝屏,冒烟

  7.   老师事物
  8.       上课功能
  9. */
  10. class LanPingException extends Exception{
  11.         LanPingException(String msg)
  12.         {
  13.                 super(msg);
  14.         }
  15. }
  16. class MaoYanException extends Exception{
  17.            MaoYanException(String msg)
  18.            {
  19.                  super(msg);
  20.            }
  21. }
  22. class TeachStopException extends Exception{
  23.                    TeachStopException(String msg)
  24.                   {
  25.                         super(msg);
  26.                   
  27.                   }
  28. }
  29. class FixComputer{
  30.           public void Fix()
  31.           {
  32.                 System.out.println("把电脑修好了");
  33.           }
  34. }
  35. class Teacher{
  36.          private String name;
  37.         Teacher(String name)
  38.         {
  39.            this.name=name;
  40.         }
  41.         Computer co=new Computer();
  42.         FixComputer fi=new FixComputer();

  43.         public void teachxue()throws TeachStopException
  44.         {         
  45.                 try
  46.                 {
  47.                    co.run();
  48.                   System.out.println(name+"老师在上课");
  49.                 }
  50.                 catch (LanPingException e)
  51.                 {
  52.                         System.out.println(e.getMessage());
  53.                         co.result();
  54.                         teachxue();
  55.                         
  56.                 }
  57.                 catch(MaoYanException e)
  58.                 {         System.out.println(e.getMessage());
  59.                          this.function();
  60.                 }
  61.            
  62.         }
  63.         public void function()
  64.         {
  65.                 System.out.println("大家做练习吧");
  66.                 fi.Fix();

  67.         }
  68. }
  69. class Computer{
  70.         private int i=1;         
  71.          public void run()throws LanPingException,MaoYanException
  72.         {
  73.             if (i==1)
  74.                      throw new LanPingException("电脑蓝屏了");
  75.                 if(i==2)
  76.                    throw new MaoYanException("电脑冒烟了");
  77.          System.out.println("电脑正常开机运行");
  78.         }
  79.         public void result()
  80.         {
  81.                 System.out.println("电脑重启");
  82.            
  83.         }
  84. }

  85. class ComputerTest{
  86.           public static void main(String[] args)
  87.           {                 Teacher te=new Teacher("石松老师");
  88.                            try
  89.                            {
  90.                                   te.teachxue();
  91.                            }
  92.                            catch (TeachStopException e)
  93.                            {
  94.                                   te.function();
  95.                            }
  96.                 }
  97. }
复制代码

作者: lucy198921    时间: 2013-3-30 23:14
哥们,代码中没有接收到某一个方法的返回指令,一直在里面循环.


电脑蓝屏  


电脑重启

电脑蓝屏

电脑重启
.
.
.
..


..


作者: 陈丽莉    时间: 2013-3-30 23:35
若还有问题,继续追问;没有的话,将帖子分类改成【已解决】哦~  

作者: HM何伟    时间: 2013-3-31 11:04
over了,明白了
作者: lucy198921    时间: 2013-3-31 12:58
  1. /*
  2.   老师上课这个问题,用自己的笔记本

  3.   笔记本事物
  4.      开机运行功能
  5.          2个异常,蓝屏,冒烟

  6.   老师事物
  7.       上课功能
  8. */

  9. class LanPingException extends Exception
  10. {
  11.         LanPingException(String msg)
  12.         {
  13.            super(msg);
  14.         }
  15. }

  16. class MaoYanException extends Exception
  17. {
  18.         MaoYanException(String msg)
  19.         {
  20.            super(msg);
  21.         }
  22. }
  23. class TeachStopException extends Exception
  24. {
  25.         TeachStopException(String msg)
  26.         {
  27.           super(msg);
  28.         }
  29. }

  30. class Computer
  31. {
  32.         //电脑状态指示 变量
  33.         private int x = 0;
  34.         public void run()throws LanPingException,MaoYanException
  35.         {
  36.           if(x==1)
  37.                   throw new LanPingException("电脑蓝屏了");
  38.           if(x==2)
  39.                   throw new MaoYanException("电脑冒烟了");
  40.           System.out.println("开机了");
  41.         }

  42.         public void reset()
  43.         {
  44.            System.out.println("重启了");
  45.            x = 0;
  46.         }
  47. }

  48. class Teacher
  49. {
  50.         private String name;
  51.         Teacher(String name)
  52.                 {  this.name = name;}
  53.     Computer c = new Computer();

  54.         public void teach() throws TeachStopException
  55.         {
  56.        try
  57.        {
  58.                 c.run();
  59.             System.out.println(name+"..老师上课");
  60.        }
  61.        catch (LanPingException e)
  62.        {
  63.                    System.out.println(e.getMessage());
  64.                    c.reset();
  65.                    teach();
  66.        }
  67.            catch(MaoYanException e)//MYE e = new MaoYanException();
  68.                 {
  69.                         System.out.println(e.getMessage());
  70.                 throw new TeachStopException("课程不能再进行了");
  71.             }

  72.           
  73.         }
  74.         public void test()
  75.         {
  76.         System.out.println("请大家做练习");
  77.         }
  78. }

  79. class  ExceptionTest
  80. {
  81.         public static void main(String[] args)
  82.         {
  83.                 Teacher t = new Teacher("张三");
  84.                 try
  85.                 {
  86.                         t.teach();
  87.                 }
  88.                 catch (TeachStopException e)
  89.                 {
  90.                         t.test();
  91.                 }
  92.                
  93.         }
  94. }
复制代码
再看看这个代码吧,或许你有更多的了解.    fix这个方法应该是在老师这个类里,  Teacher t=new Teacher();
作者: 黑马李杰    时间: 2013-3-31 15:20
因为你的Computer类中的变量i的值一直没变,所以每次调用run()方法都是抛出蓝屏的异常,你把异常抓住之后又调用了teachxue()方法,这样jvm又调用run()方法又抛出相同的异常,类似于递归,所以会出现死循环,你在result()方法中,把i的值加1就可以了。




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