您好stackoverflow成员,这是一个与"类加载时间"的实际含义相关的小问题.
例如,以下代码:
public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
System.out.println("Indeed");
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static { System.out.println("x "); }
}
Run Code Online (Sandbox Code Playgroud)
它会打印出第一个"x",它是静态的,因此静态初始化块总是在"类加载时"加载.我明白了,但你确切知道这个加载时间到了吗?我认为当第一个类通过创建第一个对象在main方法中被调用时,但是在这种情况下,结果应该通过首先打印出"Indeed"而不同.任何人都可以帮我澄清这个疑问吗?我已经检查了其他帖子一般性地谈论这个论点,但我认为更清楚(至少对我来说)在确切的时候,在上面报告的代码中,"类加载时间"发生了.
提前致谢.
你的问题的答案在JLS章节12.4.1当初始化发生时
\n\n\n\n\n类或接口类型
\n\nT将在第一次出现以下任一情况之前立即初始化:\n\n
\n- \n
TT是一个类并创建了一个实例。- \n
TT是一个类,并且调用由声明的静态方法。- 由 声明的静态字段
\nT被赋值。- 使用由 声明的静态字段
\nT,并且该字段不是常量变量 (\xc2\xa74.12.4)。- \n
T是顶级类 (\xc2\xa77.6),并且T执行词法嵌套在 (\xc2\xa78.1.3) 中的断言语句 (\xc2\xa714.10)。
我建议您开始阅读 JLS 第 12.4 章上面的几行内容。类和接口的初始化
\n\n从第 12 章执行开始,它准确地描述了何时需要加载类。加载后将进行初始化。
\n| 归档时间: |
|
| 查看次数: |
4399 次 |
| 最近记录: |