最近学习JAVA基础。刚好舍友给发来一道题,关于JAVA类的执行顺序
public class test1 {
{System.out.println("1");}
static {System.out.println("5");}
public test1(){
System.out.println("2");
}
public test1(int a){
System.out.println(a);
}
public static void main(String[] args) {
test2 testM = new test2(7);
}
}
class test2 extends test1{
{System.out.println("3");}
static {System.out.println("6");}
public test2() {
System.out.println("4");
}
public test2(int b){
System.out.println(b);
}
}
输出为了简便。我按数字输出
现在看一下执行结果:
根据结果得出:
java的执行顺序是: 父静态代码块 > 子静态代码块 > 父代属性初始化 > 父代码块 > 父构造函数 > 子代属性初始化 > 子代码块 > 子构造函数。
也就是说最终的执行顺序是:
1.类中所有属性的默认值(一举而成)
2.父类静态属性初始化,静态块,静态方法的声明(按出现顺序执行)
3.子类静态属性初始化,静态块,静态方法的声明 (按出现顺序执行)
4.调用父类的构造方法,
首先父类的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行)
然后父类构造方法。
5.调用子类的构造方法,
首先子类的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行)
然后子类构造方法。
其中静态代码块只执行一次。