1

“OCP Java SE 6 Programmer Practice Exams (Exam 310-065)”Assesment test 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

抄送 1 1

D. 抄送 1 2

E. 抄送 2 2

F. 编译失败。

G. 运行时抛出异常。

书上的答案是 C。

但是当我尝试运行此代码时,我得到编译错误,说“静态字段 WeatherTest.Weather.RAINY 应该以静态方式访问”。

这是正确和预期的,但没有人在互联网上抱怨它,所以我想知道我是否遗漏了什么?它与Java版本有关吗?

4

2 回答 2

2

这本书是对的,正确答案是 C,c c 1 1可以在这里测试。

此错误是由您的 IDE 产生的,它是从警告中提升的。假设您正确复制粘贴了所有代码。准备考试时不要使用 IDE,使用最简单的文本编辑器和javac.

它与 Java 版本无关,它在 Java SE 6 及更高版本的所有版本中都一样。

最后但并非最不重要的一点 - 永远不要编写这样的代码。这只是考试hokus-pokus...

于 2015-05-06T16:53:46.723 回答
1

代码编译并给出答案 C。

正在发生的一切是您的 IDE 向您发出警告,即您不应访问类实例上的静态成员,因为它令人困惑。w.RAINY使它看起来像是RAINY一个实例字段,而实际上它是静态的。在这种情况下w实际上是null。访问静态成员的常用方法是使用ClassName.member. 在这里你应该写Weather.RAINY

于 2015-05-06T17:06:36.473 回答