public class Test { private static int i; private int k; //静态代码块,主要用于初始化类的静态成员变量 //在静态代码块中不能使用非静态的成员变量或方法 static { System.out.println("赋值前:i--------->"+i); i = 1; System.out.println("赋值后:i--------->"+i); } //代码块 { System.out.println("赋值前:k--------->"+k); k = 1; System.out.println("赋值后:i--------->"+k); } public Test(){ super(); System.out.println("---进入构造器---"); System.out.println("i------>"+i); System.out.println("k------>"+k); } public static void main(String[] args) { System.out.println("---进入main方法---"); new Test(); System.out.println("completed!!!"); } } // 运行结果 //赋值前:i--------->0 //赋值后:i--------->1 //---进入main方法--- //赋值前:k--------->0 //赋值后:i--------->1 //---进入构造器--- //i------>1 //k------>1 //completed!!!
从运行结果我们可以看出Java初始化成员变量是:先静态 然后 非静态
大致的流程如下:
初始化静态成员变量 -> 初始化静态代码块 (静态变量或静态代码块,只在第一次调用该类时执行初始化) -> 初始化一般成员变量 -> 初始化代码块 -> 进入构造方法 -> 首先执行super()(可以选择不同的父类构造方法,默认为无参),初始化父类的成员变量 -> 执行构造方法中的初始化
时间: 2024-11-07 03:43:08