jvm对类的加载顺序测试

父类

package test;

public class Parent {
    
    public static int a = menthod2();
    public int b = 11;
    {
        System.out.println("父快类的非静态块");
    }
    
    static {
        System.out.println("父类的静态块");
    }
    
    public Parent(){
        System.out.println("父类的构造函数");
    }
    
    public static void menthod(){
        System.out.println("父类的静态方法");
    }
    
    public static int   menthod2(){
        System.out.println("父类的静态变量");
        return 10;
    }
    
    public void menthod1(){
        System.out.println("父类的非静态方法");
    }

}

子类

package test;

public class Parent {
    
    public static int a = menthod2();
    public int b = 11;
    {
        System.out.println("父快类的非静态块");
    }
    
    static {
        System.out.println("父类的静态块");
    }
    
    public Parent(){
        System.out.println("父类的构造函数");
    }
    
    public static void menthod(){
        System.out.println("父类的静态方法");
    }
    
    public static int   menthod2(){
        System.out.println("父类的静态变量");
        return 10;
    }
    
    public void menthod1(){
        System.out.println("父类的非静态方法");
    }

}

测试得到

public class Test {
    public static void main(String[] args) {
        Child child = new Child();
        child.menthod();
        
    }

}

输出:

父类的静态变量
父类的静态块
子类的静态变量
子类的静态块
父快类的非静态块
父类的构造函数
子类的非静态块
子类的构造函数
子类的静态方法

说明Jvm的执行顺序是:

父类的静态变量----->父类的静态块----->子类的静态变量------>子类静态块------>父类的非静态块------>父类的构造函数------>子类的非静态块---子类的构造函数

----->子类的静态方法

注意: char类型的基本类型初始化的时候值为null

   一个构造函数中只能调用另外一个构造函数,不能同时调用两个构造函数..

原文地址:https://www.cnblogs.com/working/p/3585269.html