黑马程序员技术交流社区

标题: 异常的抛出问题 [打印本页]

作者: taotao    时间: 2013-8-6 13:19
标题: 异常的抛出问题
本帖最后由 杨兴庭 于 2013-8-6 19:00 编辑

在讲线程的时候,老师定义了一个Res类:
然后用这个Res类实例化一个对象“r",作为一个锁,用在下面的线程中:

我们先看一下wait()在object里的定义:

很显然会抛出异常。问题出现了,老师说这个代码里wait()不能抛,只能catch!为什么?
这里面的wait()是由锁"r"调用的,r肯定继承object类,子类方法可以抛出父类抛出的异常啊!


作者: 影响力147753321    时间: 2013-8-6 14:30
标题: RE: 异常的抛出问题
虽然wait()是由锁"r"调用的,r也肯定继承object,但是最终wait()方法是要被实现线程类的run()方法调用的。因为wait()方法一定存在于run方法体中)。run()方法不能抛出异常,(根据继承原则)。如果wait()方法法抛异常。run()方法一定得处理。其实这里所说的不能抛异常,说的是run方法。其它不要求。但是根据处理异常原则,能处理的就不要向上抛,一般就在发生异常的地方就处理了。
作者: taotao    时间: 2013-8-6 16:26
影响力147753321 发表于 2013-8-6 14:30
虽然wait()是由锁"r"调用的,r也肯定继承object,但是最终wait()方法是要被实现线程类的run()方法调用 ...

O(∩_∩)O谢谢,我明白了,能不能抛异常是run()的事,和 r 没关系,是吧。
作者: 草帽    时间: 2013-8-6 17:06
子类覆盖父类方法抛出异常不能比父类多。run是没有异常抛出的,所以必须try-catch。




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