Java类初始化顺序
首先要知道
static{…}叫静态代码块,在类加载的时候就会执行,只会执行一次
{…}叫做构造代码块,只要创建对象就会执行一次,并且在该类的构造方法之前执行
例1:
不存在父类的情况下
public class parent {
{System.out.println("构造代码块");}
static{
System.out.println("静态代码块");
}
public parent() {
System.out.println("构造方法");
}
public static void main(String[] args){
parent obj1 = new parent();
System.out.println("=================这里是分割线==================");
parent obj2 = new parent();
}
}
执行结果
静态代码块
构造代码块
构造方法
=================这里是分割线==================
构造代码块
构造方法
可以看到,静态代码块最先执行,并且只执行了一次,构造代码块和构造方法则是创建一次对象就执行一次
例2
存在父类的情况下
public class parent {
{System.out.println("父类:构造代码块");}
static{
System.out.println("父类:静态代码块");
}
public parent() {
System.out.println("父类:构造方法");
}
}
public class son extends parent {
{System.out.println("子类:构造代码块");}
static{
System.out.println("子类:静态代码块");
}
public son() {
System.out.println("子类:构造方法");
}
public static void main(String[] args){
son son = new son();
}
}
结果`
父类:静态代码块
子类:静态代码块
父类:构造代码块
父类:构造方法
子类:构造代码块
子类:构造方法
最终得出结论
java初始化顺序为 父类静态代码块–>子类静态代码块–>父类构造代码块–>父类构造方法–>子类构造代码块–>子类静态方法