如果引用的静态字段是final,为什么不执行静态初始化程序

use*_*652 1 java static final

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)

end*_*u_l 5

基本上发生的事情是static final原语和字符串的组合导致它们被编译器内联,这可能阻止了静态初始化块的执行,因为a类永远不会被类加载器加载,就像a.a在编译期间解决的那样