OCP Java SE 6 Практические вопросы - WeatherTest Enum
Вопрос в "Оценочном экзамене 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++;
}
}
}
Что в итоге?
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 или чем-то другим?
2 ответа
Код компилируется и дает ответ С.
Все, что происходит, это то, что ваша IDE выдает вам предупреждение о том, что вам не следует обращаться к статическим членам в экземпляре класса, так как это сбивает с толку. w.RAINY
выглядит так RAINY
это поле экземпляра, когда на самом деле оно статично. В этом случае w
на самом деле null
, Обычный способ получить доступ к статическим членам - это использовать ClassName.member
, Здесь вы должны написать Weather.RAINY
,
Книга верна и правильный ответ - С, c c 1 1
как можно проверить здесь.
Эта ошибка вызвана вашей IDE, которая была повышена из предупреждения. Предполагая, что вы скопировали весь код правильно. Не используйте IDE при подготовке к этому экзамену, используйте самый простой текстовый редактор и javac
,
Он не имеет ничего общего с версией Java, он работает одинаково во всех версиях Java SE 6 и выше.
И последнее, но не менее важное: никогда не пишите такой код. Это только экзамен, хокус-покус...