类加载过程:
1、类加载就是执行Java程序编译之后在字节码文件中生成的clinit()方法(称之为类构造器),clinit()方法由静态变量和静态代码块组成。
2、子类的加载首先需要先加载父类,如果父类为接口。则不会调用父类的clinit方法。一个类中可以没有clinit方法。
3、clinit方法中的执行顺序为:父类静态变量初始化,父类静态代码块,子类静态变量初始化,子类静态代码块。
4、clinit()方法只执行一次。
对象实例化过程:
1、对象实例化过程就是执行Java程序编译之后在字节码文件中生成的init()方法(称之为实例构造器),init()方法由非静态变量、非静态代码块以及对应的构造器组成。
2、init()方法可以重载多个,有几个构造器就有几个init()方法,每次创建实例,调用哪一个构造器,就会调用相应的init()方法。
3、init()方法中的执行顺序为:父类变量初始化,父类代码块,父类构造器,子类变量初始化,子类代码块,子类构造器。
clinit()方法优先于init()方法执行,所以整个顺序就是:
父类静态变量初始化,父类静态代码块,子类静态变量初始化,子类静态代码块,父类非静态变量初始化,父类非静态代码块,父类构造器,子类非静态变量初始化,子类非静态代码块,子类构造器。