黑马程序员技术交流社区

标题: 第9天视频,毕老师讲课,电脑冒烟了。。 [打印本页]

作者: 潇湘溪语    时间: 2013-11-21 10:12
标题: 第9天视频,毕老师讲课,电脑冒烟了。。
本帖最后由 潇湘溪语 于 2013-11-22 01:00 编辑

毕老师视频第9天里的问题,重点是在红字部分…


老毕用电脑上课。
开始思考上课中出现的问题。
比如问题是
        电脑蓝屏。
        电脑冒烟。

要对问题进行描述,封装成对象。
可是当冒烟发生后,出现讲课进度无法继续。
出现了讲师的问题:课时计划无法完成。

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 = 3;
        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();//问题在这里,初始化teacer的时候,有名字和电脑,但为什么不用 Computer cmpt = new Computer(); 来创建一个对象,而是直接用cmpt = new Computer();
        }

        public void prelect()throws NoPlanException
        {
                try
                {
                        cmpt.run();                        
                }
                catch (LanPingException e)
                {
                        cmpt.reset();
                }
                catch (MaoYanException e)
                {
                        throw new NoPlanException("课时无法继续"+e.getMessage());
                }
                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("换老师或者放假");
                }
        }
}


作者: aspoMAN    时间: 2013-11-21 10:36
成员变量里已经有computer的声明了,直接使用就可以了

作者: 孙涛00    时间: 2013-11-21 10:38
private Computer cmpt;

这里已经创建了对象,为什么你还要再创建一次,到时你在调用teacher的cmpt属性(getCmpt())的时候就会出现空指针异常的错误
作者: 何伟超    时间: 2013-11-21 16:09
创建过之后直接就可以调用了,在创建岂不是很麻烦吗?
作者: Angel♥儱唲    时间: 2013-11-21 17:01
这把电脑定义成成员变量是为了让他作用于整个类的
作者: FFF    时间: 2013-11-21 18:32
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
作者: 潇湘溪语    时间: 2013-11-22 00:58
FFF 发表于 2013-11-21 18:32
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89 ...

谢谢嗯,我马上修改类型。有时候被大段代码覆盖了,往往倒是一些细小东西忽视了。。。
作者: quan23355    时间: 2013-11-23 14:48
类是加载到方法区中的,如果在加载到方法区中就创建对象,会占用内存空间,在teacher类构造函数中创建computer对象是因为创建teacher类对象时才会调用teacher类构造函数,即才会创建computer类对象,这样就可以实现,我需要时才调用,不需要时不创建也不会占用内存。另一个角度考虑,你想想是老师配电脑还是电脑配老师呢?是先有老师,才去配电脑吧?




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