OCP Java SE 6练习题 - WeatherTest Enum

时间:2015-05-06 16:46:21

标签: java enums static open-closed-principle

“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版本有什么关系吗?

2 个答案:

答案 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