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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
需求:毕老师用电脑上课。

可能出现的问题

比如:  电脑蓝屏
                电脑冒烟

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

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

出现了讲师的问题:可是计划无法完成

*/
class LanPingException extends  Exception
{
        LanPingException(String msg)
        {
            super(msg);
        }
}

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;//重启后状态变为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是程序停止的标志,不要将语句写在其后,一旦发生相应异常执行不到语句,编译会不通过。
                        throw new NoPlanException("课时无法继续");
                       
                }
                System.out.println("讲课");
        }
        public void test()
        {
            System.out.println("练习");
        }
}
class ExceptionText
{
        public static void main(String[] args)
        {
                Teacher t=new Teacher("毕老师");
                try
                {
                        t.prelect();
                }
                catch (NoPlanException e)
                {
                        System.out.println("换老师或放假");
                }
       
        }
}


  super(msg);里面的参数传递给谁啦?像程序中的语句throw new LanPingException("蓝屏"); 其中的“蓝屏”传递给谁啦?程序运行时没有效果啊。请各位详细讲解一下。



评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览
super(msg);  传递给他的父类  throw new LanPingException("蓝屏");  这个异常时个对象  传给这个异常的构造函数

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 赞一个!

查看全部评分

回复 使用道具 举报
super(msg)也就是调用它父类Exception的构造方法 来对本类进行初始化
throw new LanPingException("蓝屏")这个只有在  if(state==2)时才会抛出,然后会被catch语句捕获,由它进行具体的处理。
但是必须程序运行时符合条件才有异常抛出,然后才可以捕捉到。
回复 使用道具 举报
本帖最后由 罗玉宁 于 2013-3-8 11:08 编辑

Super(msg)是调用父类的构造方法 你也可以自己写,不用父类的构造方法如下代码:
class LanPingException extends  Exception
{
                private String message;//message 用于显示自定义的异常信息
        LanPingException(String message)
        {
            this.message = message;
                        
        }
                public String getMessage()
                {
                        return message;
                }
}
但是你所定义的getMessage() 等类似的方法在父类中已经有了 ,我们为什么还要自己在写呢。我们只要手动的把异常信息传递给父类的构造方法就行了。
像程序中的语句throw new LanPingException("蓝屏"); 其中的“蓝屏”传递给谁啦?程序运行时没有效果啊。
是因为teacher再调用prelect()方法是该方法捕获了该异常,并进行了处理。你所说的没有看到效果是是不是没有看到“蓝屏”字样?如果是这样,你可以在
catch (LanPingException e)                {
  System.out.println(e.getMessage());//添加该行代码,打印信息
                        cmpt.reset();                }这样你就看到效果了。
回复 使用道具 举报
罗玉宁 发表于 2013-3-8 11:06
Super(msg)是调用父类的构造方法 你也可以自己写,不用父类的构造方法如下代码:
class LanPingException e ...

很好,谢谢拉啊
回复 使用道具 举报
HM汪磊 发表于 2013-3-8 16:19
很好,谢谢拉啊

帮你改成【已解决】了,记得自己修改帖子的分类,可以减少版主的工作量~ 谢谢合作~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马