1. 程式人生 > >Java 有關類欄位的初始化

Java 有關類欄位的初始化

例項程式碼

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; } }

結論:如果類提供了一個自定義的構造方法,將導致系統不再提供預設構造方法。