class a
{
static final int a =5;
static {
System.out.println("hi");
}
}
class b
{
public static void main(String[] args) {
System.out.println(a.a);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么静态块不运行,输出只是
五
而如果我从类变量中删除final关键字,则执行静态块并输出
hi
5
Run Code Online (Sandbox Code Playgroud)
基本上发生的事情是static final原语和字符串的组合导致它们被编译器内联,这可能阻止了静态初始化块的执行,因为a类永远不会被类加载器加载,就像a.a在编译期间解决的那样