我制作了一个包含以下内容的类:
static final多变的static带有System.out.println()语句的初始化块
如果我static final从另一个类调用变量,则该static块不会执行。
据我所知,static初始化程序块在类加载到内存时执行。
在这种情况下,内存级别发生了什么?
类没有加载到内存中吗?如果没有,其他类从哪里获得final static变量的地址?
情况 1: static块不执行
class Test2 {
static final int a = 20;
static {
System.out.println("one");
}
}
案例2: static块确实执行
class Test2 {
static final int a;
static {
a = 20;
System.out.println("one");
}
}
输出
class Test {
public static void main(String[] args) {
System.out.println(Test2.a);
}
}
情况1:
20案例二:
one 20
那么在这两个层面上发生了什么?