【Java】比较赋值、实例块与构造函数的初始化顺序
有参考:
Java类的初始化顺序(静态 代码块 构造函数等的执行顺序)_尽人事看天意的博客-CSDN博客
1.
public class chu_shi_hua {
static String name = "zct";
int age = 50;
{
System.out.println("age: "+age);
System.out.println("我是普通代码块");
}
static{
System.out.println("static name: "+name);
System.out.println("我是静态代码块");
}
chu_shi_hua(){
System.out.println("我是构造函数");
}
public static void main(String[] args) {
//chu_shi_hua father = new chu_shi_hua();
}
}
输出结果:
static name: zct
我是静态代码块
2.
public class chu_shi_hua {
static String name = "zct";
int age = 50;
{
System.out.println("age: "+age);
System.out.println("我是普通代码块");
}
static{
System.out.println("static name: "+name);
System.out.println("我是静态代码块");
}
chu_shi_hua(){
System.out.println("我是构造函数");
}
public static void main(String[] args) {
chu_shi_hua father = new chu_shi_hua();
}
}
输出结果:
static name: zct
我是静态代码块
age: 50
我是普通代码块
我是构造函数
可以看出:
执行顺序
1. 静态成员变量
2. 静态代码块
3. 普通成员变量
4. 普通代码块
5. 构造函数
3.
public class StaticBlock {
static int i = 5;
int j=1;
static {
System.out.println("First Static code i= " + i++);
}
static {
System.out.println("Second Static code i= "+ i++ );
}
public static void main(String args[]) {
System.out.println("begin main method");
StaticBlock s1 = new StaticBlock();
StaticBlock s2 = new StaticBlock();
System.out.println("At last, i= " + i);
}
}
运行结果:

可以看到在执行main函数之前,静态变量与静态代码块均初始化完毕。
浙公网安备 33010602011771号