黑马程序员技术交流社区

标题: 毕老师异常练习 疑惑 [打印本页]

作者: xiongshiran    时间: 2015-12-2 18:24
标题: 毕老师异常练习 疑惑
问题:在代码中已经用红色标记出来,不知道为什么要加入state = 1; 意义何在?
/*
毕老师用电脑上课。

开始思考上课中出现的问题。


比如问题是
        电脑蓝屏。
        电脑冒烟。

要对问题进行描述,封装成对象。


可是当冒烟发生后,出现讲课进度无法继续。

出现了讲师的问题:课时计划无法完成。


*/

class LanPingException extends Exception
{
        LanPingException(String message)
        {
                super(message);
        }
}

class MaoYanException extends Exception
{
        MaoYanException(String message)
        {
                super(message);
        }
}


class NoPlanException extends Exception
{
        NoPlanException(String msg)
        {
                super(msg);
        }
}

class Computer
{
        private int state = 2;
        public void run()throws LanPingException,MaoYanException
        {
                if(state==2)
                        throw new LanPingException("蓝屏了");
                if(state==3)
                        throw new MaoYanException("冒烟了");

                System.out.println("电脑运行");
        }
        public void reset()
        {
      state = 1; //???为什么这里要写这一句
                System.out.println("电脑重启");
               
        }
}

class Teacher
{
        private String name;
        private Computer cmpt;

        Teacher(String name)
        {
                this.name = name;
                cmpt = new Computer();

        }

        public void prelect()throws NoPlanException
        {
                try
                {
                        cmpt.run();                       
                }
                catch (LanPingException e)
                {
                        cmpt.reset();
                }
                catch (MaoYanException e)
                {
                       
                        test();
                        throw new NoPlanException("课时无法继续"+e.getMessage());
                       
                }
                System.out.println("讲课");
        }
        public void test()
        {
                System.out.println("练习");
        }

}



class ExceptionTest
{
        public static void main(String[] args)
        {
                Teacher t = new Teacher("毕老师");
                try
                {
                        t.prelect();
                }
                catch (NoPlanException e)
                {
                        System.out.println(e.toString());
                        System.out.println("换老师或者放假");
                }
               
        }
}



作者: 再续啸傲    时间: 2015-12-2 18:31
我怎么没见到过这个异常练习。。。不过同问
作者: Ansel_young    时间: 2015-12-2 21:46
感觉毕老师用state =1`2`3标识电脑三种状态,reset()函数改变state的值,这样就可以调用run()方法,“电脑运行”了
作者: 冰霜之卅    时间: 2015-12-2 21:48
真是个生动有趣的例子 用来讲异常类。

首先 : 自定义一个异常类  继承自Exception类。 提供两种异常方法。
接着 :自定义一个 电脑内 电脑运行的三个方法。
        电脑运行捕获异常 如果捕获蓝屏异常 就调用 rest()方法  如果冒烟就调用 练习方法 否则就上课
最后:自定义一个老师类  老师类的构造方法立 new了一个电脑类。

老师类的perlt() 方法 调用了 电脑类的run方法。如果捕获到 没有计划异常 就放假或者换老师。

所以呢 。 电脑有重启的方法,是因为蓝屏异常里调用了它。  
作者: Kalsifa    时间: 2015-12-3 10:19
学习一下
作者: TG·小强    时间: 2015-12-3 12:53
就是为了标识重启,蓝屏,冒烟的3中状态。
作者: xinxiangchen    时间: 2015-12-3 23:04
重启后state = 1,继续run()不会抛出异常,相当于对电脑异常的部分进行了处理
若不改变state的值再调用run(),会异常,相当于没有对电脑异常的部分进行处理
作者: 袁有福123    时间: 2015-12-3 23:37
我也没看懂
作者: xiao15779706    时间: 2015-12-4 09:07
执行reset()方法时  是因为捕捉到蓝屏异常  这时要把状态置1  否则就算进行重启  状态没有改变 即state还是等于2  就是说还是处于蓝屏状态  那不就是无限蓝屏了
所以重启之前把状态置1 转换成正常状态 防止再出现异常

这是我个人理解 谢谢~




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