《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 沒有什麼關系了。