《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 = 12;
public void go() {
System.out.println(x);
}
}
可以通过编译,static final 变量在 Java 中是常量,必须在声明或静态初始化代码块中赋值。
public class FooTestDrive {
static final int x = 12;
public void go(final int x) {
System.out.println(x);
}
}
可以通过编译,参数里的 x 和常量 x 没有什么关系了。
public class FooTestDrive {
int x = 12;
public void go(final int x) {
System.out.println(x);
}
}
可以通过编译,参数里的 x 和常量 x 没有什么关系了。