静态代码块,静态字段(成员),构造函数之间的执行顺序

 
package Test;

import java.util.ArrayList;
import java.util.Vector;

public class TEst {

    static TEst test=new TEst();
    Sub sub=new Sub();
    
    static{
        System.out.println("6");
    }

    

    public TEst(){
        System.out.println("5");
    }

    public static void main(String[] args){
        System.out.println("7");

    }


}

class Super{

    public Super(){
        System.out.println("3");
    }

    static {
        System.out.println("1");
    }
}

class Sub extends Super{

    static {
        System.out.println("2");
    }
    public Sub(){
        System.out.println("4");
    }
}

静态代码块和静态字段(成员)的执行顺序取决于代码顺序,谁在前面谁先执行,静态字段(成员)是在静态代码块中初始化的.

非静态成员是在构造器中初始化的.

一般来说,静态--在第一次载入JVM中第一个执行,但当第一个静态为静态字段时,初始化了TEst类,二初始化这个类需要Sub类,Sub类需要Super类,因此将Super类载入JVM,执行了Super的静态代码块,然后将Sub载入,执行Super的静态代码块,接着Sub的构造函数,Sub的构造函数,然后在TEst的构造器中初始化,接着才能进行 static 的TEst的初始化,执行TEst的构造函数.之后执行位于静态字段之后的静态代码块,,,,

猜你喜欢

转载自blog.csdn.net/reveire7/article/details/82385232