Java 有關類欄位的初始化
阿新 • • 發佈:2018-11-08
例項程式碼
package text; public class MethodOverload { /** * @param args */ public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.println(obj.field); } }class InitializeBlockClass{ //下面這句在初始化塊之前與之後,會影響到field欄位的初始值 //public int field=100; { field=200; } public int field=100; public InitializeBlockClass(int value){ this.field=value; } public InitializeBlockClass(){ } }
執行結果
規律(類欄位的初始化順序)
1、執行類成員定義時指定的預設值或類的初始化塊,到底執行哪一個要看哪一個“排在前面”。
2、執行類的建構函式。
類的初始化塊不接收任何的引數,而且只要一建立類的物件,它們就會被執行。因此,適合於封裝那些“物件建立時必須執行的程式碼”。
以下程式碼為何無法通過編譯?哪兒出錯了?
public class Test { public static void main(String[] args) { Foo obj1 = new Foo(); } } class Foo { int value; public Foo (int initValue) { value= initValue; } }
結論:如果類提供了一個自定義的構造方法,將導致系統不再提供預設構造方法。