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);
}
}
为什么静态块不运行,输出只是
5
如果我从类变量中删除final关键字,则会执行静态块并且输出变为
hi
5
答案 0 :(得分:5)
基本上发生的事情是基元和字符串上的static final
组合导致它们被编译器内联,这可能阻止了静态初始化块的执行,因为永远不会加载a
类由类加载器,在编译期间解析a.a
答案 1 :(得分:4)
因为带有关键字static final
的变量是编译时常量,不会触发包含该字段的类的加载。
尝试在变量 a
上使用static final
运行此代码
System.out.println(a.a)
a var = new a();
你可以看到输出
5
hi
当调用 a 时,不会触发静态块,但是当创建类的实例时,它会被触发。它可以由以下任何一个触发:
与您的问题非常相似的问题可能会有所帮助: Static block in Java not executed