您的位置:jsp学习站首页 >> JAVA类 >> JAVA考试 >> 一道SCJP考题,要考SCJP的不能不看!

一道SCJP考题,要考SCJP的不能不看!

[ 来源:互网络 | 更新日期:2007-09-17 23:49:29 | 浏览次数:9465]
简介:java中的异常可以分为3种类型: 1。从Exception类直接派生出来的异常类 2。运行时刻类(RuntimeException) 3。I/O异常类
这道题目很有意义,我转贴到这儿.
(我从www.itpub.net转贴)


谁能告诉我这样的代码,编译为何不会报错?

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的. 
Tags:关键字:考题
责任编辑:glen