“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++;
}
}
}
结果是什么?
一个。 c 1 c 1
B中。 c 1 c 2
℃。 c c 1 1
d。 c c 1 2
电子。 c c 2 2
F。编译失败。
-G。在运行时抛出异常。
这本书的答案是C。
但是当我尝试运行这段代码时,我遇到编译错误,说“静态字段WeatherTest.Weather.RAINY应该以静态方式访问”。
这是正确和预期的,但没有人在互联网上抱怨它,所以我想知道我是否遗漏了什么?它与Java版本有什么关系吗?
答案 0 :(得分:2)
这本书是正确的,正确的答案是C,c c 1 1
可以测试here。
此错误由IDE生成,该错误是从警告中提升的。假设您正确地复制粘贴了所有代码。在准备考试时不要使用IDE,使用最简单的文本编辑器和javac
。
它与Java版本无关,它在所有版本的Java SE 6及更高版本中都是一样的。
最后但并非最不重要 - 永远不要写那样的代码。这只是考试hokus-pokus ......
答案 1 :(得分:1)
代码编译并给出答案C.
所有发生的事情是你的IDE向你发出警告,你不应该访问类实例上的静态成员,因为它令人困惑。 w.RAINY
使RAINY
看起来像是一个实例字段,实际上它是静态的。在这种情况下,w
实际上是null
。访问静态成员的常用方法是使用ClassName.member
。在这里你应该写Weather.RAINY
。