返回信息流java解惑 迷题37
public interface Type1 {
void f() throws CloneNotSupportedException;
}
public interface Type2 {
void f() throws InterruptedException;
}
public interface Type3 extends Type1, Type2 {
}
public class Arcane3 implements Type3{
public void f() {
System.out.println("Hello world");
}
public static void main(String[] args) {
Type3 t = new Arcane3();
t.f();//这里不可以编译 提示CloneNotSupportedException没有被捕获
}
}
但是java解惑一书中认为一个方法抛出得受检查异常集合是它所适用的所有类型申明要抛出受检查异常的交集 而不是并集 按照作者的观点 CloneNotSupportedException 和 InterruptedException 没有交集,t.f()应该可以编译通过
我尝试将public interface Type3 extends Type1, Type2 改为
public interface Type3 extends Type2, Type1
则Arcane3 会提示 应该捕获InterruptedException
由实践可以看到,子类抛出的异常与申明异常基类的顺序有关
困惑中。。。。请各位大侠帮忙看看
这是一条镜像帖。来源:北邮人论坛 / soft-design / #14635同步于 2007/1/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
java异常处理的困惑
hfbuptbyr
2007/1/17镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
没有书,不知道前后文
【 在 hfbuptbyr (逆水寒) 的大作中提到: 】
: 摘自 java解惑 迷题37
: public interface Type1 {
: void f() throws CloneNotSupportedException;
: ...................
简单的说就是书上说那个程序编译没问题,但是我这里没有通过,我的是jdk5 update10
【 在 Neverwinter 的大作中提到: 】
: 问题是我不知道前后文在说什么啊
1.5.0_06编译运行都没有问题
【 在 hfbuptbyr (逆水寒) 的大作中提到: 】
: 标 题: Re: java异常处理的困惑
: 发信站: 北邮人论坛 (Wed Jan 17 16:55:50 2007), 站内
:
: 简单的说就是书上说那个程序编译没问题,但是我这里没有通过,我的是jdk5 update10
: 【 在 Neverwinter 的大作中提到: 】
: : 问题是我不知道前后文在说什么啊
:
: --
: 听西多夫的:奔跑时思索方法,在困境中寻求突破
:
:
: ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 210.53.128.*]
我这里也不能,1.5.0 update 8
不过我只是想知道上下文在说什么东西而已,不关心这个程序
【 在 hfbuptbyr (逆水寒) 的大作中提到: 】
: 简单的说就是书上说那个程序编译没问题,但是我这里没有通过,我的是jdk5 update10
异常抛出是由规定的哦:
1.父类异常能识别子类异常,但子类异常却不能识别父类异常;
2.一个try可能有几个catch,那么这几个catch的顺序是特别重要的,只要前面的满足,那么后面的就不会再catch了,也就是说,在catch的时候,总是把最细化(最子类层)的异常放在前面,父类异常放在后面,层层过滤。如果先catch父类异常,那么恭喜你,一下就中,你得到个最粗的异常,之后那么细化的异常catch都不会再做了。
发现另外一个问题
LZ给出的两个异常都是继承自Exception,如果将其中一个或两个都换成RuntimeException的子类,就不会出错了
试验了一下,通过eclipse的代码自动生成看到如下情况:
interface Type1 {
void f() throws NullPointerException;
}
interface Type2 {
void f() throws IllegalArgumentException;
}
interface Type3 extends Type1, Type2 {
}
class Arcane3 implements Type3 {
public void func() {
Type3 t = new Arcane3();
t.f();
try {
t.f();
} catch (NullPointerException cnse) {
}
}
/* (non-Javadoc)
* @see test.misc.Type1#f()
*/
public void f() throws NullPointerException {
System.out.println("Hello world");
}
}
ecl只自动生成了NullPointerException,Type2中定义的异常不见了
谁有Java关于异常这个方面的解释?
【 在 Neverwinter (nez@Atlantis) 的大作中提到: 】
: 发现另外一个问题
: LZ给出的两个异常都是继承自Exception,如果将其中一个或两个都换成RuntimeException的子类,就不会出错了