-
<李>
公开课InitField {,,
李>
<李>
,,公共静态void main (String [] args) {,,
李>
<李>
,,,,,SuperInitField p=新SuperInitField ();,,
李>
<李>
,,,,,SuperInitField c=new SubInitField ();,,
李>
<李>
,,}
李>
<李>
}
李>
<李>
类SuperInitField {,,
李>
<李>
,,公共SuperInitField () {,,
李>
<李>
,,,,,System.out.println (“parent");,,
李>
<李>
,,}
李>
<李>
,,静态{,,
李>
<李>
,,,,,System.out.println(“静态parent");,,
李>
<李>
,,}
李>
<李>
}
李>
<李>
类SubInitField延伸SuperInitField {,,
李>
<李>
,,公共SubInitField () {,,
李>
<李>
,,,,,System.out.println (“child");,,
李>
<李>
,,}
李>
<李>
,,静态{,,
李>
<李>
,,,,,System.out.println(“静态child");,,
李>
<李>
,,}
李>
<李>
}
李>
-
<李>
一个对本类的& lt; init>()方法的调用;
李>
<李>
实现了对应构造方法的方法体的字节码。
李>
-
<李>
一个父类的& lt; init>()方法的调用;
李>
<李>
任意实例变量初始化方法的字节码;
李>
<李>
实现了对应构造方法的方法体的字节码。
李>
-
<李>
新SuperInitField SuperInitField p=();,,
李>
<李>//SuperInitField的超类是Object ,
李>
<李>//创建SuperInitField对象,属于首次主动使用,因此要先初始化对象类,然后再调用SuperInitField类变量初始化语句或者静态初始化语句,所以要输出静态parent ,
李>
<李>//类被装载,连接和初始化之后,创建一个对象,因此需要首先调用了对象的默认构造方法,然后再调用自己的构造方法,所以要输出parent ,
李>
<李>
新SubInitField SuperInitField c=();,,
李>
<李>//SubInitField继承自SuperInitField ,
李>
<李>//创建SubInitField对象,属于首次主动使用,父类SuperInitField已被初始化,因此只要调用SubInitField类变量初始化语句或者静态初始化语句,所以要输出静态child ,
李>
<李>//类被装载,连接和初始化之后,创建一个对象,因此需要首先调用了SuperInitField的构造方法,然后再调用自己的构造方法,所以要输出家长,然后再输出child
李>
-
<李>
公共类测试{,,
李>
<李>
,,公共测试(){,,
李>
<李>
,,,,,System.out.println (“parent");,,
李>
<李>
,,}
李>
<李>
,,静态{,,
李>
<李>
,,,,,System.out.println(“静态parent");,,
李>
<李>
,,}
李>
<李>
,,公共静态void main (String [] args) {,,
李>
<李>
,,,,,System.out.println (“main");,,
李>
<李>
,,}
李>
<李>
}
李>