Java中的Throwable和Exception

时间:2016-05-30 02:25:47

标签: java exception runtimeexception throwable randoop

假设我有一个名为BugException的类,它从RuntimeException扩展而来 并且BugException有一个复制构造函数,它接受一个Throwable。

此代码编译和类型检查:

Throwable e = ...;
if (e instanceof BugException) {
   throw new BugException(e);
}

为什么会这样:

Throwable e = ...;
if (e instanceof BugException) {
   throw e;
}

不编译并提供错误消息:未处理的异常。 java.lang.Throwable中。 ?

为什么这种不必要的包装必须满足typechecker?

1 个答案:

答案 0 :(得分:5)

在编译时,不知道e是什么类型的异常。它可能是一个已检查的异常,在这种情况下,编译器需要您将throw包装在try / catch中,或者让方法抛出它。

但是,如果您显式地转换未经检查的异常,那么它将进行编译。

Throwable e = ...;
if (e instanceof BugException) {
   throw (BugException) e;
}