0

我想在线程级别了解 java 中的异常传播。

我的理解是,当代码抛出异常并且该方法未处理该异常时,它将存储在该线程的堆栈中,如果未处理异常,jvm 只会不断从堆栈中弹出方法调用。此方法将适用于 Checked 和 unchecked 异常。如果我错了,请纠正我。

通过上述解释,我无法理解静态块中的异常是如何处理的,因为它们将在类加载期间被调用。

对此有什么想法吗?

4

2 回答 2

1

Java 严格而精确地定义了一个类被初始化的时刻(与加载相反,顺便说一句!)。它总是由一些 Java 代码触发,因此触发类 init 的特定 Java 代码行将收到异常。没有魔法,没有特殊情况,它总是在运行时发生,就像任何其他异常一样。

于 2013-03-14T10:05:44.793 回答
1

静态块中的代码也在线程中执行(即使它确实在类初始化时调用),因此相同的策略适用于从静态块抛出的未经检查的异常。

请注意,如果您的代码从静态块中抛出已检查异常,您将收到编译错误。

于 2013-03-14T09:40:34.740 回答