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...
【讨论】:
所以我已经在 JDK 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练习生的自我修养』java-se进阶³ • 线程的等待与唤醒