类里面的大括号{}加载顺序
一、序言
前几天遇到了一个类加载的顺序问题,废话不多说,直接上代码
二、问题
上代码:
package com.hz.test; public class Demo2 { public static void main(String[] args) { new Son(); new Son(); } } class Father{ //public static int i =0; public Father(){ System.out.println("3"); } static{ //System.out.println(i); System.out.println("1"); } { System.out.println("2"); } } class Son extends Father{ public Son(){ System.out.println("4"); } static{ System.out.println("5"); } { System.out.println("6"); } }
三、问题解决
1、大括号 {}是类加载的时候加载,每次类加载都会进行加载,而且是构造方法之前,static代码块之后进行加载的。
2、加载的时候,先加载的是父类的静态代码块,和子类的静态代码块,然后再是父类{}的加载,然后就是父类的构造器的加载,然后就是子类的{}的加载,子类的构造器的加载。
父类static块 > 子类static块 > 父类的大括号{} >父类的构造方法 > 子类的大括号{} >子类的构造方法
3、顺序为 1 5 2 3 6 4 2 3 6 4