天天看點

static / final 迷你練習

《HeadFirst Java》 page 285 頁 有關static / final 的小練習

下面哪些程式可以通過編譯?

public class FooTestDrive {
     static int x ;

    public void go() {
        System.out.println(x);
    }
}
           

可以通過編譯,static 變量未初始化時,編譯器會按照執行個體變量預設初始化的值給你的 static 變量初始化(此處int型變量預設值為0)。非靜态方法可以調用靜态方法、靜态變量。

public class FooTestDrive {
      int x ;

    public static void go() {
        System.out.println(x);
    }
}
           

不能通過,靜态方法不能調用非靜态變量、非靜态方法。因為靜态方法根本不知道堆上有沒有執行個體。

public class FooTestDrive {
    final int x ;

    public  void go() {
        System.out.println(x);
    }
}
           

不能通過,final 标記的變量必須初始化。

public class FooTestDrive {
    static final int x = ;

    public  void go() {
        System.out.println(x);
    }
}
           

可以通過編譯,static final 變量在 Java 中是常量,必須在聲明或靜态初始化代碼塊中指派。

public class FooTestDrive {
    static final int x = ;

    public  void go(final int x) {
        System.out.println(x);
    }
}
           

可以通過編譯,參數裡的 x 和常量 x 沒有什麼關系了。

public class FooTestDrive {
    int x = ;

    public  void go(final int x) {
        System.out.println(x);
    }
}
           

可以通過編譯,參數裡的 x 和常量 x 沒有什麼關系了。