package com.zjlolife.extendsTest; public class Test_04 { public static void main(String []args ){ S s = new S(); } } class P { private int i = 2; static { System.out.println("父类的static代码块最先初始化"); } { System.out.println("父类中的普通代码快"); i = 6; } public P() { System.out.println(i); } } class S extends P{ private int i = 3; { System.out.println("子类中的普通代码快"); } static { System.out.println("子类类的static代码块先初始化"); } public S() { System.out.println(i); } } //结果: //父类的static代码块最先初始化 //子类类的static代码块先初始化 //父类中的普通代码快 //6 //子类中的普通代码快 //3 //结论:1,类加载的时候就会初始化static代码块,因此父类和子类的static会先调用。 // 2,子类初始化的时候,会先对父类进行初始化,因此会先为父类的成员变量分配内存,再执行父类的普通代码块(包刮field),然后再调用父类的构造器 // 3,接着开始进行子类的初始化。跟上面 2 的说明一样。
继承那些事。。。。实例说明(2)---初始化顺序
最新推荐文章于 2013-06-17 11:04:31 发布