Java中的静态块未执行

类测试{
公共静态void main(字符串arg[]){
System.out.println(“主方法”);
System.out.println(Mno.VAL);//SOP(9090);
System.out.println(Mno.VAL+100);//SOP(9190);
}
}
Mno类{
最终静态int VAL=9090;
静止的{
System.out.println(“**”Mno的静态块\t:“+VAL”);
}
}

我知道加载类时会执行静态块。但是在这种情况下,类Mno中的实例变量是final,因为静态块没有执行

为什么会这样?如果我删除最终版,它会正常工作吗

将首先分配哪个内存,static final变量或static

如果由于finalaccess修饰符,类没有被加载,那么变量如何获得内存

  1. static final int字段是一个编译时常量,其值被硬编码到目标类中,而不引用其原点
  2. 因此,主类不会触发包含该字段的类的加载
  3. 因此,不会执行该类中的静态初始值设定项

具体而言,编译的字节码对应于:

公共静态void main(字符串arg[]){
System.out.println(“**主方法”);
系统输出打印项次(9090)
系统输出打印LN(9190)
}

一旦删除final,它就不再是编译时常量,并且上面描述的特殊行为不适用。Mno类按预期加载,并执行其静态初始值设定项

发表评论