Java类的初始化顺序(代码测试)
Java类的初始化顺序为
静态变量/静态代码块—main()方法—非静态变量/代码块—构造器
代码验证:
public class LoadClassTest { |
测试结果:
注:关于成员变量和类变量的区别可以看这一篇
JVM自动执行静态变量/静态代码块,每个静态代码块只被执行一次。 public class LoadClassTest {
public static void main(String[] args) {
Stu[] stu = new Stu[3];
stu[0] = new Stu("小李", '男');
stu[1] = new Stu('女');
stu[2] = new Stu('男');
for(Stu s : stu){
System.out.println("name:" + s.getName() + ",id:" + s.getId() + ", gender:" + s.getGender());
}
}
}
class Stu{
private static int nextId;
private int id;
private String name;
private char gender;
//静态代码块
static{
Random generator = new Random();
nextId = generator.nextInt(1000);
}
//代码块
{
id = nextId;
nextId++;
}
//构造方法
public Stu(String name, char gender){
this.name = name;
this.gender = gender;
}
public Stu(char gender){
this("Student #" + nextId , gender);
}
public Stu(){}
public int getId() {
return id;
}
public String getName() {
return name;
}
public char getGender() {
return gender;
}
}
可见静态代码块只执行了一次,而代码块随类的加载而执行。