技术开发 频道

答疑解惑:一道SCJP考题

【IT168 技术文档】

这样的代码,编译为何不会报错?

class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { public void aMethod() throws RuntimeException { } }
这道题目是这样的:
 
父类Base的方法aMethod?出一个ClassNotFoundException异常
 
子类Derived重写aMethod方法并?出一个RuntimeException异常
 
如果按照Java的Exception理论,那么应该是:
 
子类Derived的aMethod方法要么不?异常
 
要么就必须?出ClassNotFoundException异常或是ClassNotFoundException异常的子类才行
 
而RuntimeException并不是ClassNotFoundException的子类
 
它们没有任何的继承关系
 
按照Java的Exception理论,应该编译不能通过.
 
但是现在可以编译通过,这是为什么呢?

runtimeexception是自动throws的,不需要declare(decalre了效果也不会有任何变化),即使声明了throws runtime exception,编译器也不会按通常的规则处理。所以上述代码的等效形式是:

class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { public void aMethod() { } }
******答案******
 
Java中的异常可以分为3种类型:
 
1.从Exception类直接派生出来的异常类
 
2.运行时刻类(RuntimeException)
 
3.I/O异常类
 
那个理论对于1,3成立,但是RuntimeException是没有必要去catch的。

0
相关文章