JAVA構造函數運行解析

源代碼如下
import java.util.*;
class super1{
{
  System.out.println('super1 ok');
}
  super1()
  {
    System.out.println('3');
  }
}

class Employee extends super1{
 private String name;
 private double salary=1500.00;
 private Date birthday;
 public Employee(String n,Date DoB){
   System.out.println('2');
   name=n;
   birthday=DoB;
 }
 public Employee(String n){
   this(n,null);
   System.out.println('4');
 }
}

class Manager extends Employee{
  {
    System.out.println('Manager ok');
  }
  private String department;
  public Manager(String n,String d){
 super(n);
 department=d;
  }
}

public class test1{
  public static void main(String args[]){
 new Manager('Smith','sales');
  }
}

new Manager('Smith','sales')調用過程:
(1)綁定構造函數參數。其實就是傳遞參數的過程
(2)查看是否有this()語句。沒有。雖然沒有使用this()語句調用構造函數,但是該步驟不能省略
(3)調用super()語句,此時,程序跳轉到Public Employee(String n)。
(4)綁定構造函數參數String n
(5)查看是否有this()。有,則執行構造函數public Employee(String n,Date DoB)
(6)綁定構造函數參數String n,Date DoB
(7)查看是否有this()語句。沒有
(8)執行有系統自動插入的super()語句:執行super1()
(9)執行顯式初始化語句System.out.println('super1 ok');
(10)執行構造函數語句System.out.println('3');
(11)執行顯式初始化語句private double salary=1500.00;
(12)執行構造函數語句System.out.println('2');同時執行name=n;birthday=DoB;
(13)執行構造函數語句System.out.println('4');
(14)執行顯式初始化語句System.out.println('Manager ok');
(15)執行構造函數語句department=d;

幾點總結:
(1)對象是由new運算符創建的,且在任何構造函數執行之前就已經創建完畢了
(2)構造函數的執行總是“向上”的:而且總是先執行完父類的構造函數
(3)在構造函數中,沒有this()語句則由super()語句。沒有this()時,或者自己編寫super(),或者由系統自動調 
    用 super()   
(4)顯式初始化語句總是先於構造函數語句,但後於super()或this()

 
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章