java类初始化过程
?
?
/*测试3个内容:类加载顺序子父类执行过程对象初始化过程从几次试验我们看到当执行到类时,类被加载到内存,并初始化静态成员被加载到共享区不用实例化对象就可以调用静态资源静态成员变量,静态成员方法,静态代码块,只初始化一次而普通变量,普通代码块,构造方法,在每次实例化对象时都要初始化子类对象要初始化时,会先初始化父类静态成员和静态代码块,再初始化子类静态成员和静态代码块,然后是父类普通代码块,父类构造方法然后是子类普通代码块,子类构造函数当子类名直接调用继承自父类的静态成员时,子类不会初始化,而只初始化父类(因为这已经足够了)补充:子类的所有构造方法中,如果未指定父类构造方法,则第一条语句是隐式的super(),即父类的空参数构造方法*/class Fu //父类{ public static String staticField = "父类-静态变量"; public static String extend = "父类-静态变量extend"; //让子类调用 public String field = "父类-普通变量"; public Fu() { System.out.println("父类-构造方法"); } static { System.out.println("Fu_static: 父类-静态初始化块"); System.out.println("Fu_static:"+staticField); } { System.out.println("Fu_普通块:"+field); System.out.println("Fu_普通块:"+"父类-初始化块"); }}class Zi extends Fu //子类{ public static String staticField = "子类 静态变量"; public String field = "子类 普通变量"; { System.out.println("Zi_普通块:"+field); System.out.println("Zi_普通块:"+"子类 初始化块"); } public Zi() { System.out.println("子类 子类构造方法"); } static { System.out.println("Zi_static:"+"子类 静态初始化块"); System.out.println("Zi_static:"+staticField); }}class Demo { public static void main(String args[]) throws Exception { System.out.println("main方法"); //Thread.sleep(2000); //System.out.println("Zi.staticField:"+Zi.staticField); //Thread.sleep(2000); //System.out.println("..."); //Fu fu = new Fu(); Thread.sleep(2000); System.out.println(""); Zi zi = new Zi(); System.out.println(""); Zi zi2 = new Zi(); //System.out.println(Zi.extend); //子类名调用父类静态成员 } } ? 执行结果情况太多就不贴了