2013-03-14 79 views
0

我想了解线程级别的java异常传播。异常是如何传播的?

我的理解是,当代码抛出一个异常,并且如果该方法没有处理该异常,那么它存储在该线程的堆栈中,并且如果未处理异常,jvm只会弹出堆栈的方法调用。该方法将适用于已选中和未选中的异常。如果我错了,请纠正我。

以上说明我无法理解如何处理静态块中的异常,因为它们将在类加载时调用。

对此的任何想法?

+2

请检查这个线程http://stackoverflow.com/questions/2070293/exception-in-static-initialization-block – 2013-03-14 09:30:07

回答

1

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

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

1

Java的严格和精确定义在哪个类是初始化的时刻(相对于加载,BTW!)。它总是由一些Java代码触发的,所以触发类init的特定行代码将会收到异常。没有魔法,没有特殊情况,它总是在运行时发生,就像任何其他异常一样。