Java 中的 Throwable 和 Exception
Throwable and Exception in Java
假设我有一个名为 BugException 的 class 扩展自 RuntimeException
BugException 有一个复制构造函数,它接受一个 Throwable。
此代码编译和类型检查:
Throwable e = ...;
if (e instanceof BugException) {
throw new BugException(e);
}
为什么会这样:
Throwable e = ...;
if (e instanceof BugException) {
throw e;
}
不编译并给出错误信息:未处理的异常。 java.lang.Throwable。 ?
为什么需要这种不必要的包装来满足类型检查器的要求?
编译时,不知道e
是什么异常。它可能是一个已检查的异常,在这种情况下,编译器将需要您将 throw
包装在 try/catch 中或让方法抛出它。
但是,如果您明确地强制转换未经检查的异常,那么它将编译。
Throwable e = ...;
if (e instanceof BugException) {
throw (BugException) e;
}
假设我有一个名为 BugException 的 class 扩展自 RuntimeException
BugException 有一个复制构造函数,它接受一个 Throwable。
此代码编译和类型检查:
Throwable e = ...;
if (e instanceof BugException) {
throw new BugException(e);
}
为什么会这样:
Throwable e = ...;
if (e instanceof BugException) {
throw e;
}
不编译并给出错误信息:未处理的异常。 java.lang.Throwable。 ?
为什么需要这种不必要的包装来满足类型检查器的要求?
编译时,不知道e
是什么异常。它可能是一个已检查的异常,在这种情况下,编译器将需要您将 throw
包装在 try/catch 中或让方法抛出它。
但是,如果您明确地强制转换未经检查的异常,那么它将编译。
Throwable e = ...;
if (e instanceof BugException) {
throw (BugException) e;
}