java构造函数调用其他程序的顺序_java初始化构造函数调用顺序
看我大師歸來:
1. Base b = new Sub();
2. Base b = 直接忽略,從 new Sub();開始
3. 類加載器加載 Base,Sub 類到jvm;
4. 為Base,Sub 類中的兩個屬性baseName 分配存儲空間,但是不初始化;
注意:屬性的初始化時放在構造器中,按照代碼順序執行的。
5. new Sub會調用Sub的無參構造器,而在這個構造器中會隱式調用父類Base的無參構造器;
6. 父類Base的構造器中代碼本質是
public Base()
{
baseName = "base";
callName();
}
即父類的屬性baseName 的值為base。但為何輸出null,騷年別急。
7. 因為父類構造器方法是在子類中調用的,即大環境是子類。此時,調用的方法callName()當然是指子類的方法。而這個方法打印的屬性baseName當然也是子類的。那現在子類的屬性baseName的值是多少呢?答案是null.因為此時子類Sub的構造器內代碼本質是:
super();
baseName="sub";
此時baseName="sub"還沒執行。
因此,最后的值當然是null.
附上代碼:
public classA {static B b = new B(3);
B bb= new B(4);
A() {
System.out.println("A constructor");
}static{
System.out.println("A static block");
}
{
System.out.println("A block");
}
}
public class C extendsA {static B b = new B(1);
B bb= new B(2);
C() {
System.out.println("C constructor");
}static{
System.out.println("C static block");
}
{
System.out.println("C block");
}public static voidmain(String[] args) {
C c= newC();
}
}classB {
B(inti) {
System.out.println("B"+i);
}
}
總結
以上是生活随笔為你收集整理的java构造函数调用其他程序的顺序_java初始化构造函数调用顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 后端校验_如何实现Java后
- 下一篇: svm java_SVM入门(十)将SV