java classLoader的加载中 static final 变量的初始化时机
程序员文章站
2022-05-21 22:21:36
...
class :
加载:
连接:
初始化:
当final 变量不能确定时:
package com.wonders.javase.classloader;
import java.util.Random;
class FinalTest1 {
public static final int a = 2;
public static int c = 5;
static {
System.out.println("final test1");
}
}
class FinalTest2 {
public static final int b = new Random().nextInt(100);
static {
System.out.println("Final Test2 static block");
}
}
public class Test2 {
public static void main(String[] args) {
System.out.println(FinalTest1.a);
//System.out.println(FinalTest1.c);
System.out.println("========================");
System.out.println(FinalTest2.b);
}
}
结果:
2
========================
Final Test2 static block
36
而当final 变量是能确定为常量时:
package com.wonders.javase.classloader;
class Parent {
static int a = 1;
static {
System.out.println("parent static block");
}
public Parent() {
System.out.println("constructor parent");
}
}
class Child extends Parent {
static int b = 2;
static {
System.out.println("child static block ");
}
public Child() {
System.out.println("constructor child ");
}
}
public class Test1 {
public static void main(String[] args) {
System.out.println(Child.b);
new Child();
}
}
结果:
parent static block
child static block
2
constructor parent
constructor child