VO.javajava
public class VO { // 惟一測試用屬性 private int age; // 普通代碼塊 { System.out.println("VO 普通代碼塊..."); } // 靜態代碼塊 static { System.out.println("VO 靜態代碼塊..."); } // 無參構造函數 public VO() { super(); System.out.println("VO 無參構造函數...."); } // 有參參構造函數 public VO(int age) { super(); this.age = age; System.out.println("VO 有參參構造函數...."); System.out.println("VO 有參構造函數中的 age = " + this.age); } // getters/setters public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "VO [age=" + age + "]"; } }
Test.javaide
/** * 靜態代碼塊、代碼塊、構造函數、匿名內部類、匿名內部類中的代碼塊 */ public class Test { // 普通代碼塊 { System.out.println("Test 普通代碼塊...."); } // 靜態代碼塊 static { System.out.println("Test 靜態代碼塊...."); } // main方法 public static void main(String[] args) { // 聲明 VO vo = null; // 匿名內部類 vo = new VO(21) { // 匿名內部類,繼承VO對象。 // 匿名內部類中的普通代碼塊 { System.out.println("匿名內部類 普通代碼塊...."); // 年齡增長10 this.setAge(this.getAge() + 10); } /* // 匿名內部類中的靜態代碼塊, 編輯不能經過 static { } */ }; System.out.println(vo); // VO [age=31] }
}
執行main方法後的打印結果:函數
Test 靜態代碼塊.... VO 靜態代碼塊... VO 普通代碼塊... VO 有參參構造函數.... VO 有參構造函數中的 age = 21 匿名內部類 普通代碼塊.... VO [age=31]
獲得的結論:測試
總結: ======================================================================== 1)靜態代碼塊:即使不構造對象也會執行,它在類加載的時候就會執行. 證據:沒有構造(new)Test對象,可是Test類中的靜態代碼塊執行了。 2)普通代碼塊:只會在構造對象的時候執行。 證據:Test類中的普通代碼塊沒有執行,而VO類中的普通代碼塊執了。 3)雖然普通代碼塊是在構造對象的時候執行,可是普通代碼塊的執行時機是早於構造函數的執行時機的。 證據:VO普通代碼塊先執行,VO有參參構造函數再執行。 4)匿名內部類中的代碼塊執行時機在匿名內部類的父類的構造函數執行以後。 證據:VO有參參構造函數先執行,匿名內部類普通代碼塊再執行。 5)匿名內部類不只能夠繼承抽象類,接口,也能夠繼承一個普通類。 證據:如本例,匿名內部類不是實現或重寫父類的方法,而是增長了一個普通代碼塊。執行時機在父類的構造函數以後。 6)匿名內部類中不能夠寫靜態代碼塊。 證據:Eclipse中直接編輯不能經過。