黑马程序员技术交流社区

标题: 异常冒烟问题,求解答 [打印本页]

作者: 。。。。。。。    时间: 2013-11-5 15:36
标题: 异常冒烟问题,求解答
毕老师java基础视频第九天的电脑冒烟异常中,当捕获到冒烟异常后,又抛出了课时无法继续的异常,但是那个冒烟异常为什么没有进行处理呢?虽然老师处理不了,可是也应该找个能处理的人啊,难道就放那不管了?
作者: 。。。。。。。    时间: 2013-11-5 15:39
我知道对于异常,要么抛要么内部处理,可是产生的异常捕获后可以不管吗,然后又抛出一个新的异常?
作者: 李慧声    时间: 2013-11-5 16:43
你都没程序,别人哪里知道是哪里冒烟儿了,看过了记性也不会那么的好吧~~~
作者: joechen    时间: 2013-11-5 17:17
catch中抛出的异常就是对冒烟的处理
作者: miedongdong    时间: 2013-11-5 19:21
本帖最后由 miedongdong 于 2013-11-5 19:22 编辑
joechen 发表于 2013-11-5 17:17
catch中抛出的异常就是对冒烟的处理

楼上是正解
因为老师说张老师想调用电脑的run方法,现在电脑冒烟了,
让张老师知道冒烟了也解决不了,就需要抛出一个运行时异常(这就是解决的方法),做练习或者放假
至于电脑冒烟的问题肯定是有程序解决,只不过此时所解决的是张老师想调用电脑run方法的异常问题。

今天重温了一下,希望能帮到你,不懂可以继续追问,大家一起交流,一起努力吧!!!
作者: 秦大忠    时间: 2013-11-6 16:00
不处理,逐次上抛给调用者处理,当上抛到main函数时异常如果还没有被处理,程序就会结束.......
作者: 青年黨衛軍    时间: 2013-11-6 17:16
对于这个问题毕老师的视频上是有详细解答的,电脑冒烟异常,如果自己处理不了或者不想处理的话,可以抛出去让JVM处理,或者抛给指定的对象让其对异常做出处理。让指定的对象处理的话需要自定义一个异常类来完成这个异常的转换。
1.首先你要自定义一个冒烟的异常类和一个出现冒烟异常后转移异常的自定义异常处理类
  1. class ComDeadException extends Exception
  2. {
  3.         ComMaoyanException(String message)
  4.         {
  5.                 super(message);
  6.         }
  7. }

  8. class NoPlanException extends Exception
  9. {
  10.         NoPlanException(String message)
  11.         {
  12.                 super(message);
  13.         }
  14. }
复制代码
异常类构造函数之所以用的是super语句是继承了异常类,这个你知道的。
之后就是在电脑爆出冒烟异常后,把冒烟异常抛给老师,老师接到冒烟异常后也无法处理,就通过自己定义的异常处理类NoPlanException来把冒烟异常转抛给上一级去处理。
以下是Teacher类中捕捉到的冒烟异常,在异常处理过程中又抛给特定的对象了
  1. catch (ComDeadException e)
  2.                 {
  3.                         test();
  4.                         throw new NoPlanException("class interrupted..."+ e.getMessage());//处理不了抛出去
  5.                         //test(); 错误,因为上句即为结束标识,遇到异常后不会再继续运行,所以没有意义。
  6.                 }
复制代码
在最后的主函数中,才会捕捉到这个NoPlanException异常,并最后处理,老师从而转移了人民内部矛盾。
  1. public class ExceptionTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Teacher t = new Teacher("Sir");
  6.                 try
  7.                 {
  8.                         t.tech();
  9.                 }
  10.                 catch (NoPlanException e)
  11.                 {
  12.                         System.out.println(e.toString());
  13.                         System.out.println("Run B plan...");
  14.                 }
  15.         }
  16.        
  17. }
复制代码

作者: .ˋMr.Ivan    时间: 2013-11-8 00:24
毕老师的原话忘记了,大概意思就是:当一个程序出现了一个异常时,这个异常自己处理不了,但是把这个异常抛出以后又没人认识,所以要对出现的这个异常进行一次封装,把他变成别人可以识别的异常。就像那个例子中的电脑冒烟了是一个异常,这时另外一个老师要来上课,如果你把电脑冒烟这个异常告诉给了要上课的老师,老师会说:哦,冒烟了和我上课又什么关系?   如果你把冒烟这个异常封装一下,变成不能上课异常,那么要上课的老师看到这个异常就不会死活都要上课了。

以上是我的理解,如有不妥,大家交流。




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