java對象初始化順序

      已經第N次閱讀Bruce Eckle大師的《Thinking in java》了,每一次閱讀都有不同的收穫。閒來無聊,我結合第一章java的upcasting機制和第六章java初始化與類的裝載做了一個對象初始化的例子。
Shape類
package org.bjtu.edu;

public class Shape {
  
    private int i=print("現在初始化Shape的i");
  
    public void draw(){
  
    }
  
    public void erase(){
  
    }
    public Shape(){
  System.out.println("實例化Shape");
    }
  
    private static int print(String s){  
  System.out.println(s);
  return 47;
    }
}
Circle類
package org.bjtu.edu;

public class Circle extends Shape{
  
    private int i=print("現在初始化Circle的i");
  
    public void draw(){
  System.out.println("畫一個圓形");
    }
  
    public void erase(){
  System.out.println("擦除一個圓形");
    }
    public Circle(){
  System.out.println("實例化Circle");
    }
  
    private static int print(String s){  
  System.out.println(s);
  return 47;
    }
  
}
Square類
package org.bjtu.edu;

public class Square extends Shape{
  
    public void draw(){
  System.out.println("畫一個矩形");
    }
  
    public void erase(){
  System.out.println("擦除一個矩形");
    }
}
test測試
package org.bjtu.edu;

public class test {
  
    private int i=print("現在初始化test的i");
    private static int j=print("現在初始化test的j");    
    /**
  * @param args
  */

    public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println("現在運行test的main方法");
  Circle cr1;
  Circle cr=new Circle();
  //Square sq=new Square();
  test t=new test();
  t.dostuff(cr);
  //t.dostuff(sq);
    }
  
    public test(){
  System.out.println("現在實例化一個test");
    }
  
    public void dostuff(Shape s){
  s.draw();
    }
  
    private static int print(String s){  
  System.out.println(s);
  return 47;
    }
  
    public static void init(){
  System.out.println("現在運行test的static方法");    
    }
  
}
輸出結果
現在初始化test的j
現在運行test的main方法
現在初始化Shape的i
實例化Shape
現在初始化Circle的i
實例化Circle
現在初始化test的i
現在實例化一個test
畫一個圓形
得出結論,在new一個實例之前(如果僅是一個定義reference則什麼都沒發生),先初始化類的數據成員,無論是static和非static方法都是不初始化的,隨時調用隨時分配 如果編譯器發現該類有extends方法,則先執行基類方法,基類初始化同理。接着回到實例,如果有main方法則執行main方法,沒有則執行構造函數,對象初始化完畢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章