2013-11-02 3 views
0

Я написал код, который использует ширину и высоту экрана в GraphicsProgram для рисования ящиков, в которых я делаю другие вещи. Эти поля будут 1/6 вертикального размера экрана (высота).getHeight() и константы (java)

так, как я это теперь в моем методе выполнения я делаю переменную так:

int boxHeight = getHeight()/6; 

который я затем перейти к другим методам, как это:

placeBox(boxHeight); 

И в моем placeBox метод Я получаю эту переменную следующим образом:

private void placeBox(int boxHeight) { ..code.. } 

Все работает, но мне было интересно, если бы это было возможно вместо этого использовать константы, которые я бы декларировать перед моим методом выполнения, как это:

private static final int constantBoxHeight = getHeight()/6; 

Однако это дает мне следующую ошибку компилятора:

non-static method getHeight() cannot be referenced from a static context 

Так мои вопросы: я реализации постоянного правильного путь? Если нет, то как его реализовать правильно? Кроме того, если то, что я пытаюсь сделать, даже возможно, в чем преимущество использования констант вместо того, чтобы переместить мои переменные из моего метода запуска в методы внутри него, а затем переместить его в другие методы внутри него?

GetHeight() импортируется из acm.graphics. *

+0

Что вы не понимаете об ошибке, которую вы получаете? Вы посмотрели его? –

+0

Когда вы объявляете статическую переменную, это переменная класса, а не текущий объект. Поэтому, если вы должны были вызвать 'getHeight()' в классе, а не в экземпляре, и если это может работать (а это не так), какую высоту экземпляра вы пытаетесь получить? Это не имеет смысла делать это. –

+0

@HovercraftFullOfEels Итак, что мне нужно сделать, это объявить константу в моем методе запуска следующим образом: \t \t final int bH = getHeight()/6; Этот способ лучше, чем перемещение переменных, как это было до этого? – Chronicle

ответ

0

Ваше постоянное статическое поле, но вы инициализировать его со значением, полученным из возвращаемого значения метода экземпляра. Методы экземпляра требуют экземпляра. Статические поля не принадлежат экземплярам и поэтому не могут быть инициализированы с помощью методов экземпляра.

До тех пор, пока у вас нет другого способа получить высоту, вам понадобится экземпляр этого класса. Я бы лично не использовал константу в этом случае, потому что нет (или, по крайней мере, очень немногих) недостатков рефакторинга кода и использования члена экземпляра или локальной переменной.

+0

сделаю, спасибо. Вы упомянули, что в разных случаях могут быть недостатки. Не могли бы вы привести пример? – Chronicle

+0

Как я уже сказал, очень мало недостатков. Например, JVM будет занимать 4 дополнительных байта памяти (+ накладные расходы) на один экземпляр, и одноразовый расчет экономит ресурсы - теоретически.Понимаете, ни один из этих вопросов не имеет значения в вашем случае. Вы можете использовать переменную экземпляра (как вы сказали в комментарии) или вычислить высоту в новом методе. –

Смежные вопросы