public class Demo {
public static String A = "静态变量";
public String B = "定义时给实例变量赋值";
public String C;
static{
System.out.println("执行静态代码块前调用静态变量(只能调用静态变量):" + A);
System.out.println("执行静态代码块");
A = "执行静态代码块时给静态变量赋值";
System.out.println("执行静态代码块后调用静态变量(只能调用静态变量):" + A);
System.out.println("-----------------------------------------");
}
{
System.out.println("构造代码块执行前调用静态变量:" + A);
System.out.println("构造代码块执行前调用定义时赋值的实例变量:" + B);
System.out.println("构造代码块执行前调用定义时未赋值的实例变量:" + C);
System.out.println("执行构造代码块");
A = "执行构造代码块时给静态变量赋值";
B = "执行构造代码块时给已赋值的实例变量赋值";
C = "执行构造代码块时给未赋值的实例变量赋值";
System.out.println("构造代码块执行后调用静态变量:" + A);
System.out.println("构造代码块执行后调用定义时赋值的实例变量:" + B);
System.out.println("构造代码块执行后调用定义时未赋值的实例变量:" + C);
System.out.println("-----------------------------------------");
}
public Demo(){
System.out.println("构造方法执行前调用静态变量:" + A);
System.out.println("构造方法执行前调用定义时赋值的实例变量:" + B);
System.out.println("构造方法执行前调用定义时未赋值的实例变量:" + C);
System.out.println("执行构造方法");
A = "执行构造方法时给静态变量赋值";
B = "执行构造方法时给已赋值的实例变量赋值";
C = "执行构造方法时给未赋值的实例变量赋值";
System.out.println("构造方法执行后调用静态变量:" + A);
System.out.println("构造方法执行后调用定义时赋值的实例变量:" + B);
System.out.println("构造方法执行后调用定义时未赋值的实例变量:" + C);
System.out.println("-----------------------------------------");
}
public static void main(String[] args) {
{
System.out.println("执行普通代码块前调用静态变量(只能调用静态变量):" + A);
System.out.println("执行普通代码块");
A = "执行普通代码时给静态变量赋值";
System.out.println("执行普通代码块后调用静态变量(只能调用静态变量):" + A);
System.out.println("-----------------------------------------");
}
new Demo();
}
}
结果:
执行静态代码块前调用静态变量(只能调用静态变量):静态变量
执行静态代码块
执行静态代码块后调用静态变量(只能调用静态变量):执行静态代码块时给静态变量赋值
-----------------------------------------
执行普通代码块前调用静态变量(只能调用静态变量):执行静态代码块时给静态变量赋值
执行普通代码块
执行普通代码块后调用静态变量(只能调用静态变量):执行普通代码时给静态变量赋值
-----------------------------------------
构造代码块执行前调用静态变量:执行普通代码时给静态变量赋值
构造代码块执行前调用定义时赋值的实例变量:定义时给实例变量赋值
构造代码块执行前调用定义时未赋值的实例变量:null
执行构造代码块
构造代码块执行后调用静态变量:执行构造代码块时给静态变量赋值
构造代码块执行后调用定义时赋值的实例变量:执行构造代码块时给已赋值的实例变量赋值
构造代码块执行后调用定义时未赋值的实例变量:执行构造代码块时给未赋值的实例变量赋值
-----------------------------------------
构造方法执行前调用静态变量:执行构造代码块时给静态变量赋值
构造方法执行前调用定义时赋值的实例变量:执行构造代码块时时给已赋值的实例变量赋值
构造方法执行前调用定义时未赋值的实例变量:执行构造代码块时时给未赋值的实例变量赋值
执行构造方法
构造方法执行后调用静态变量:执行构造方法时给静态变量赋值
构造方法执行后调用定义时赋值的实例变量:执行构造方法时给已赋值的实例变量赋值
构造方法执行后调用定义时未赋值的实例变量:执行构造方法时给未赋值的实例变量赋值
-----------------------------------------
初始化顺序:
静态变量—–>静态代码块—–>普通代码块—–>构造代码块—–>构造方法