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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 潇湘溪语 于 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("换老师或者放假");
                }
        }
}

点评

FFF
骚年,要淡定、小问题一个!其实自己努力看看也能解决~!  发表于 2013-11-21 18:29

评分

参与人数 1技术分 +2 收起 理由
FFF + 2 活动额外技术分+1

查看全部评分

12 个回复

正序浏览
类是加载到方法区中的,如果在加载到方法区中就创建对象,会占用内存空间,在teacher类构造函数中创建computer对象是因为创建teacher类对象时才会调用teacher类构造函数,即才会创建computer类对象,这样就可以实现,我需要时才调用,不需要时不创建也不会占用内存。另一个角度考虑,你想想是老师配电脑还是电脑配老师呢?是先有老师,才去配电脑吧?

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
FFF + 1 + 3 给予新同学的鼓励分+1

查看全部评分

回复 使用道具 举报
FFF 发表于 2013-11-21 18:32
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89 ...

谢谢嗯,我马上修改类型。有时候被大段代码覆盖了,往往倒是一些细小东西忽视了。。。
回复 使用道具 举报
FFF 金牌黑马 2013-11-21 18:32:17
地板
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
回复 使用道具 举报
这把电脑定义成成员变量是为了让他作用于整个类的

点评

FFF
报告,又发一只水货!请求支援!请总部支援!!!  发表于 2013-11-21 18:31
回复 使用道具 举报
创建过之后直接就可以调用了,在创建岂不是很麻烦吗?

点评

FFF
水货~无力~~战五渣渣~  发表于 2013-11-21 18:32
回复 使用道具 举报
private Computer cmpt;

这里已经创建了对象,为什么你还要再创建一次,到时你在调用teacher的cmpt属性(getCmpt())的时候就会出现空指针异常的错误

点评

FFF
报告,又发现一个水货~。(虽然指出了问题,但总感觉少了点什么~)  发表于 2013-11-21 18:30

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3

查看全部评分

回复 使用道具 举报
成员变量里已经有computer的声明了,直接使用就可以了

点评

FFF
水货~~  发表于 2013-11-21 18:29
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马