程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java構造函數的執行

Java構造函數的執行

編輯:關於JAVA

Java 在創建對象的時候會要執行它的構造函數。不僅如此,Java 還要執行父類的構造函數,往上一級一級直到沒有父類為止。對於初學者來說,有三個問題不容易搞懂:

1、父類的構造函數是否一定會執行?

2、是先執行子類的構造函數還是先執行父類的構造函數?

3、如果父類有多個構造函數,那麼 Java 會選擇哪一個?

- 父類的構造函數是否一定會執行?

是的,父類的構造函數一定會執行。所以如果某個類的層次很深,那麼它創建對象時就會要執行一大堆的構造函數。

- 是先執行子類的構造函數還是先執行父類的構造函數?

Java 會順著繼承結構往上一直找到 Object,然後從 Object 開始往下依次執行構造函數。先執行父類的構造函數,那麼子類的構造函數執行的時候就不需要擔心父類的成員是否初始化好了。

- 如果父類有多個構造函數,那麼 Java 會選擇哪一個?

如果父類有多個構造函數,那麼子類可以在構造函數中選擇其中一個(且最多只能選擇一個)來執行。如果子類沒有選擇,那麼 Java 將會執行父類的缺省構造函數。下面是一個例子:

父類:

view plaincopy to clipboardprint?
public class SuperClass {
public SuperClass() {
System.out.println("super class constructed.");
}
public SuperClass(String name) {
System.out.println("super class constructed with name: " + name);
}
}
public class SuperClass {
public SuperClass() {
System.out.println("super class constructed.");
}
public SuperClass(String name) {
System.out.println("super class constructed with name: " + name);
}
}

子類:

view plaincopy to clipboardprint?
public class SubClass extends SuperClass {

public SubClass() {

System.out.println("sub class constructed.");

}

public SubClass(String name) {

//這一句在語法上不是必須的。但有沒有這一句,執行起來不一樣。有了這一句,就表示子類的構造過程中調用

//的是父類的帶字符串參數的構造函數,也就是 public SuperClass(String name) 這個方法。如果沒有這一

//句,就表示子類的構造過程中調用的是父類的缺省構造函數。

super(name);

System.out.println("sub class constructed with name: " + name);

}

public static void main(String[] args) {

new SubClass();

new SubClass("world");

}

}

public class SubClass extends SuperClass {

public SubClass() {

System.out.println("sub class constructed.");

}

public SubClass(String name) {

super(name);

System.out.println("sub class constructed with name: " + name);

}

public static void main(String[] args) {

new SubClass();

new SubClass("world");

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved