为什么输出在编译时没有显示?

时间:2015-10-20 07:42:42

标签: java

我知道静态块是在类加载时执行的。我想问 - 他们是静态加载还是动态加载?因为我知道有两种类型的加载 - 静态和动态。如果它们是静态加载的,那么为什么它们的输出在运行时显示而不是在编译时?

1 个答案:

答案 0 :(得分:1)

  

我知道静态块是在类加载时执行的。

这不完全准确。当类初始化时执行它们。这种情况发生在加载类和类“使用”之间的某个时间。

  

- 他们(静态块)是静态加载还是动态加载?

静态块与它们所属的类同时加载。可以静态加载或动态加载类。

但是,在Java上下文中,“静态加载”仍然在运行时发生。

Java中静态和动态加载之间的区别在于加载的类,因为它们是由源代码中的Java标识符命名的,以及通过调用Class.forName(name)加载的类,等价。

  

如果它们是静态加载的,那么为什么它们的输出在运行时显示而不是在编译时显示?

在Java上下文中,所有加载在运行时发生。因此,静态块的所有输出都将在运行时显示。