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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付江涛 金牌黑马   /  2014-3-29 23:56  /  1184 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 付江涛 于 2014-3-30 12:25 编辑
  1. <font color="Red">/*

  2. 需求:
  3.         电脑启动  老师讲课

  4. 电脑出现的问题:
  5.         电脑蓝屏--->重启
  6.         电脑冒烟--->

  7. */

  8. class LanPingException extends Exception  
  9. {
  10.         LanPingException(String message)
  11.         {
  12.                 super(message);
  13.         }
  14. }
  15. class MaoYanException extends Exception   
  16. {
  17.         MaoYanException(String message)
  18.         {
  19.                 super(message);
  20.         }
  21. }
  22. class NoPlanException extends Exception // 这块应该叫什么?毕老师举得例子是 转换为“我”的异常,对象?
  23. {
  24.         NoPlanException(String message)
  25.         {
  26.                 super(message);
  27.         }
  28. }
  29. class Computer
  30. {
  31.         private int state=3;
  32.         public void run()throws LanPingException,MaoYanException
  33.         {
  34.                 if (state==2)
  35.                         throw new LanPingException("电脑蓝屏了");
  36.                 if(state==3)
  37.                         throw new MaoYanException("电脑冒烟了");
  38.                 System.out.println("-----电脑运行-----");
  39.         }
  40.         public void reset()
  41.         {
  42.                 System.out.println("-----重启电脑-----");
  43.         }
  44. }
  45. class Teacher
  46. {
  47.         private String name;
  48.         private Computer cpt;
  49.         Teacher(String name)
  50.         {
  51.                 this.name=name;
  52.                 cpt=new Computer();
  53.         }
  54.         public void prelect()throws NoPlanException
  55.         {
  56.                 try
  57.                 {
  58.                         cpt.run();
  59.                 }
  60.                 catch (LanPingException e)
  61.                 {
  62.                         cpt.reset();
  63.                 }
  64.                 catch (MaoYanException e)
  65.                 {
  66.                         text();
  67.                         throw new NoPlanException("-----电脑冒烟,无法继续-----"+e.getMessage());  //这块不是太明白,方法还能用在这?????
  68.                 }
  69.                
  70.                 System.out.println("-----开始讲课-----");
  71.         }
  72.         public void text()
  73.         {
  74.                 System.out.println("-----做题-----");
  75.         }
  76. }

  77. class Mytest
  78. {
  79.         public static void main(String[] args)
  80.         {
  81.         
  82.                 Teacher t=new Teacher("毕老师");
  83.                 try
  84.                 {
  85.                         t.prelect();
  86.                 }
  87.                 catch (NoPlanException e)
  88.                 {
  89.                         System.out.println(e.toString());  //  ????
  90.                         System.out.println("-----换老师或者放假-----");
  91.                 }
  92.                
  93.                
  94.         }
  95. }


  96. //ps:异常这一块学的不是太好,上面的内容就是模模糊糊写出来的,感觉根本不行,还得重新再看一遍。</font>
复制代码

模模糊糊的,感觉根本不行啊,得重新看一遍。。。这有几个问题,在上面注释出来了,希望帮忙解答一下()。

5 个回复

倒序浏览
其实这就像自己定义方法一样。通俗讲,比如你定义一个类person  在person中你有定义了方法getname()来拿到person中的姓名,就是方法的调用。而你的class NoPlanException extends Exception这就是定义异常 Exception的子类NoPlanException。也就是NoPlanException继承了Exception。当报Exception异常时,自然就能调用NoPlanException。而你下面的throw new NoPlanException("-----电脑冒烟,无法继续-----"+e.getMessage());就是一个建立新对象,调用里面的message,来进行输出。既然继承了异常父类,自然就是用在这种情况和下面的异常情况啊。这是我的理解 希望能帮到你 。互相交流
回复 使用道具 举报
optimisticpig 来自手机 中级黑马 2014-3-30 09:48:39
藤椅
第一个,自己定义的类,继承exception。第二个,调用自己写的异常类的getmessage方法。第三,调用tostring方法。建议楼主下个API文档看看
回复 使用道具 举报
苏伯亚 发表于 2014-3-30 09:42
其实这就像自己定义方法一样。通俗讲,比如你定义一个类person  在person中你有定义了方法getname()来拿 ...

  1. class NoPlanException extends Exception
  2. {
  3.         NoPlanException(String message)  //-----参数是一个String的-----
  4.         {
  5.                 super(message);
  6.         }
  7. }
复制代码
  1. NoPlanException e = new NoPlanException("-----电脑冒烟,无法继续-----"+e.getMessage()) //可这除了""里的String,还调用了getMessage()方法,还能这样的写?
复制代码


回复 使用道具 举报

我理解的就是 你自己定义了继承Exception的子类MaoYanException 和LanPingException。而在定义的时候有用super继承了 Exception中的message,自然就要对他进行敷写。而你的敷写是在这里
public void run()throws LanPingException,MaoYanException
        {
                if (state==2)
                        throw new LanPingException("电脑蓝屏了");
                if(state==3)
                        throw new MaoYanException("电脑冒烟了");
                System.out.println("-----电脑运行-----");
        }

而e你已经声明了是属于NoPlanException类。这句NoPlanException e = new NoPlanException

而getMessage(),是里面的方法自然可以调用啊。
比如class TestString {
        public static void main(String[] args) {
                String s=“sldfjsl”;
                System.out.println("s="+s.length());
                               
        }
}
和这个程序中的输出语句调用s.length()方法一样的调用而已。
其实你自己定义的两个异常处理就和我们定义的类一样,一样的用。不要想的多难,看是普通类就行了。
回复 使用道具 举报
苏伯亚 发表于 2014-3-30 10:40
我理解的就是 你自己定义了继承Exception的子类MaoYanException 和LanPingException。而在定义的时候有用 ...

懂了,就是把它想得太复杂了,只是调用了一个继承的方法而已 = =
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马