方法的throws
列表显然在编译期间起作用。然而,它在运行时是否有任何影响?
例如,如果我有一个没有throws
列表的方法并且使用黑暗的字节码魔法来召唤并抛出IncrediblyCheckedException
,它会毫无疑问地抛出它,或者运行时验证器会注意到这一点并抛出是错误还是其他什么?
答案 0 :(得分:6)
它对运行时没有任何影响。一个很好的例子:
Thread.currentThread.stop(new Exception());
可以在任何地方编写,代码行将抛出异常。
上面将从本机代码中抛出异常,但这是使用普通Java throw
的另一个技巧:
public static void main(String[] args) {
CurrentClass.<RuntimeException>sneakyThrow(new Exception());
}
@SuppressWarnings("unchecked")
private static <E extends Throwable> void sneakyThrow(Throwable t) throws E {
throw (E)t;
}