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 и выше.

И последнее, но не менее важное: никогда не пишите такой код. Это только экзамен, хокус-покус...

Другие вопросы по тегам