OCP Java SE 6 练习题 - WeatherTest 枚举

Posted

技术标签:

【中文标题】OCP Java SE 6 练习题 - WeatherTest 枚举【英文标题】:OCP Java SE 6 Practice Questions - WeatherTest Enum 【发布时间】:2015-05-06 16:46:21 【问题描述】:

“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

C. cc 1 1

D. cc 1 2

E. cc 2 2

F。编译失败。

G.运行时抛出异常。

书上的答案是 C。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

所以我已经在 J​​DK 1.6.18 和 JDK 1.7.0.21 上测试过了,它编译失败,很奇怪... @SyedSirajUddin 在 Windows 下?将该文本复制到文件WeatherTest.java,使用javac WeatherTest.java 编译并使用java WeatherTest 运行,输出是什么?你在使用 IDE 吗?也许是因为它。我在我的机器上测试了 1.7.0_75 并打印了c c 1 1 是的@Adam你是对的,我使用的是IDE,我尝试使用普通的记事本并尝试使用javac编译并使用java运行它,它工作正常。我认为这是我使用的 Eclipse IDE 发出警告,我认为这是一个编译错误。酷现在我知道区别了:) 您使用的是哪个版本的eclipse? Eclipse 带有内部 java 编译器。使用 eclipse 旧版本时要注意。【参考方案2】:

代码编译并给出答案C。

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

【讨论】:

我同意这一点,但没想到这本书甚至会发出警告,但很高兴知道幕后发生的事情。谢谢 @SyedSirajUddin 我认为这本书可能真的很好,但是这段代码故意很糟糕。它的设计看起来像 w.RAINY 可能会抛出 NullPointerException 或代码可能无法编译或 count 可能会增加两次。你不应该写那样的代码!

以上是关于OCP Java SE 6 练习题 - WeatherTest 枚举的主要内容,如果未能解决你的问题,请参考以下文章

Java SE基础---学生管理系统小练习

『Java练习生的自我修养』java-se进阶³ • 线程的等待与唤醒

69期-Java SE-005_二维数组综合练习-001-002

Java SE——java语言编程练习格式化字符和常量

JAVA_SE基础——25.面向对象练习

JAVA_SE基础——25.面向对象练习