![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
freshAngel |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Есть код:
При нажатии на кнопку "Cool" фрейм должен скрываться. Но проблема в том, что в слушателе не видна переменная frame. А если сделать так как подсказывает NetBeans
То все работает. Зачем здесь нужен спецификатор final. Насколько я знаю с помощью этого спецификатора можно создавать константы и отменять наследование. А здесь зачем!? Кстати если передать например аргумент функции которая описана в другом *.java файле, то этот аргумент у функции так-же должен иметь этот спецификатор. Знаю, что в JAVA для того, чтоб переменные были видны в анонимном классе, они должны быть объявлены как final. Но почему тогда - так:
Переменная "a" не имеет спецификатора final и вызывается из анонимного класса слушателя. Все работает в данном случае. |
||||||
|
|||||||
Evgeni68 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 9.7.2007 Репутация: нет Всего: 3 |
Переменная "a" является полем (членом) класса Test, а внутренние классы имеют полный доступ к полям внешнего класса. Модификатор final нужно использовать для _локальных_ переменных, используемых в анонимных классах. |
|||
|
||||
freshAngel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Спасибо, понял. Но что делать например вот в этом случае.
После нажатия кнопки переменная a должна принимать значение 15 А из - за спецификатора final сделать это нельзя, так - как a является константой! А если убрать final, то нельзя будет оперировать с локальной переменной из анонимного класса. Что можно сделать в этом случае!? Или только объявлять a полем класса Test!? Это сообщение отредактировал(а) freshAngel - 26.7.2009, 16:36 |
|||
|
||||
Evgeni68 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 9.7.2007 Репутация: нет Всего: 3 |
Из приведенного примера абсолютно не ясен смысл таких манипуляций. Ведь область видимости данной переменной ограничена конструктором. Если эта переменная участвует в какой-то логике и должна быть видна в других обработчиках действий - логично объявить ее полем класса. |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
пипец!!!
я так и думал!!! эти долбанные IDE... скоро надо будет на форуме ветку делать - отдельную - для тех, кто не пользуется IDE я пишу в FAR, очень удобно |
|||
|
||||
freshAngel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
dorogoyIV, как использование IDE связано с моим вопросом!? Evgeni68, спасибо большое, вроде все понял! |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |