类加载过程的分析

public class Loader {
    static {
        System.out.println("我是main方法所在的类的静态代码块");
    }
    {
        System.out.println("我是main方法所在的类的构造代码块");
    }
    public Loader() {
        System.out.println("我是main方法所在的类的构造方法");
    }

    public static void main(String[] args){
        new Son();
        new Loader();
    }

}

class Person{
    static {
        System.out.println("我是父类静态代码块");
    }
    {
        System.out.println("我是父类构造代码块");
    }
    public Person() {
        System.out.println("我是父类构造方法");
    }
}

class Son extends Person{
    static {
        System.out.println("我是子类静态代码块");
    }
    {
        System.out.println("我是子类构造代码块");
    }
    public Son() {
        System.out.println("我是子类构造方法");
    }
}

说明:

1.main()方法所在的类会被最先加载进来

2.使用new创建对象的时候,会去常量池里面寻找这个类的符号引用,找不到则将这个类加载进来

3.如果这个类存在父类,则它的父类也要加载进来

4.静态代码块的执行与类的加载有关,执行顺序:main()方法所在的主类 > 父类 > 子类

5.构造代码块与构造方法的执行与对象的创建有关,执行顺序:父类 > 子类,构造代码块 > 构造方法

即:父类 > 子类

  静态代码块 > (构造代码块 > 构造方法)

 

posted @ 2020-04-30 17:14  大浩  阅读(153)  评论(0)    收藏  举报