" OCP Java SE 6程序员练习考试(考试310-065)"中的一个问题"评估测试2。
给定:
public class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
enum Weather {
RAINY, Sunny;
int count = 0;
Weather() {
System.out.print("c ");
count++;
}
}
}
结果是什么?
a。C 1 C 1
b。C 1 C 2
c。C C 1 1
d。C C 1 2
e。C C 2 2
f。汇编失败。
g。在运行时抛出一个例外。
答案说c。
但是,当我尝试运行此代码时,我会遇到编译错误,说"静态字段Weathertest.weather.Rainy应该以静态方式访问"。
哪个是正确且预期的,但是没有人在互联网上抱怨它,所以我想知道我是否缺少某些东西?它与Java版本有关吗?
这本书是正确的,正确的答案是C,c c 1 1
,可以在此处进行测试。
此错误是由您的IDE产生的,该错误是从警告中提取的。假设您正确复制了所有代码。准备考试时不要使用IDE,请使用最简单的文本编辑器和javac
。
它与Java版本无关,在Java SE 6及更高版本中的所有版本都相同。
最后但并非最不重要的 - 永远不要写这样的代码。这只是考试hokus-pokus ...
代码编译并给出答案C。
所发生的一切是您的IDE向您发出警告,即您不应在类实例中访问静态成员,因为它令人困惑。w.RAINY
使其看起来像RAINY
是一个实例字段,而实际上它是静态的。在这种情况下,w
实际上是null
。访问静态成员的通常方法是使用ClassName.member
。在这里您应该写Weather.RAINY
。