2015-09-13 3 views
1

Недавно я был отстранен от программирования на Java в академических целях, и во время своего первого проекта я столкнулся с чем-то интересным.Переменные Static/Class и GUI

Мне пришлось разработать графический интерфейс для магазина с кнопками, которые выполняли различные задачи, и я заметил, что с моими переменными происходит что-то странное. Любые CLASS VARIABLES, которые мои кнопки изменили с помощью своих действий, не обязательно должны быть объявлены статическими, а любые КЛАССНЫЕ ПЕРЕМЕНЫ, которые мой основной метод коснулся, должны были быть объявлены статическими.

Почему это? Мои методы Main Method и ActionListener находятся на одном уровне выполнения. (они все в одном классе, ни один из них не встроен друг в друга)

Надеюсь, этот вопрос не слишком очевиден/невозможен, я стараюсь как можно больше узнать о Java.

+0

Главный метод сам по себе статичен. Методы прослушивания слушателей не являются. –

+0

@SilvioMayolo. Так это в Java, что статические методы могут обращаться только к статическим (или локальным) переменным? – user3303680

+0

Сторона примечания, но термин «переменная класса» используется для обозначения статических полей. Нет такой вещи, как нестатическая переменная класса. Я думаю, вы ищете слово «поле» или «атрибут» или «свойство». – Zarwan

ответ

0

Ваш основной метод статический, что означает, что он не запускается на экземпляр объекта, метод вызывается в классе без создания объекта класса. Это делает определенный смысл для основного метода, потому что это первое, что делает ваша программа, поэтому нет возможности создать экземпляр объекта.

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

Я использую переменную класса, чтобы ссылаться на статические переменные и «переменная экземпляра», чтобы ссылаться на нестатические переменные.

В программировании графического интерфейса Swing очень мало оснований использовать статические переменные, мой совет состоит в том, чтобы избежать их, если это вообще возможно, потому что глобальное изменчивое состояние уродливо и трудно отлаживать. В Swing все компоненты пользовательского интерфейса и слушатели являются объектами, как только ваш основной метод инициализирует и отображает основной jframe, никакие другие статические методы или переменные обычно не нужны.

+0

Хм. Поэтому я предполагаю, что, как правило, я должен избегать загрузки важных переменных в основной метод, так что мне не придется объявлять их как статические? – user3303680

+0

@ user3303680: в программах swing, как я их написал, обычно основной метод создает только окно и отображает его. трудно дать больше советов, не видя кода. –

+0

Не вдаваясь в подробности, я помещаю код ввода/вывода файла в основной метод перед созданием окна. Это должно было загрузить инвентарь моего фиктивного магазина в массив из текстового файла. – user3303680