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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© taotao 中级黑马   /  2013-8-6 13:19  /  1274 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-6 19:00 编辑

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

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

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

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

3 个回复

倒序浏览

RE: 异常的抛出问题

虽然wait()是由锁"r"调用的,r也肯定继承object,但是最终wait()方法是要被实现线程类的run()方法调用的。因为wait()方法一定存在于run方法体中)。run()方法不能抛出异常,(根据继承原则)。如果wait()方法法抛异常。run()方法一定得处理。其实这里所说的不能抛异常,说的是run方法。其它不要求。但是根据处理异常原则,能处理的就不要向上抛,一般就在发生异常的地方就处理了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
影响力147753321 发表于 2013-8-6 14:30
虽然wait()是由锁"r"调用的,r也肯定继承object,但是最终wait()方法是要被实现线程类的run()方法调用 ...

O(∩_∩)O谢谢,我明白了,能不能抛异常是run()的事,和 r 没关系,是吧。
回复 使用道具 举报
子类覆盖父类方法抛出异常不能比父类多。run是没有异常抛出的,所以必须try-catch。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马