| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Нестатический метод использует статик-поле |
| Автор: Gunslinger 28.4.2010, 20:00 |
| В классе есть static-поле и обычный метод, в котором используется это поле. 1.Чтобы его использовать необходимо вызывать статик-конструктор? 2. Статик-конструктор автоматически не вызывается? 3. Статик-поля это типа глобальных переменных? 4. В яве статик-конструкторы так же без модификаторов доступа и параметров? |
| Автор: jk1 28.4.2010, 20:17 |
| Нету в языке Java никаких static-конструкторов, возможно вы имели ввиду static-блоки, выполняющиеся при загрузке класса? Такие блоки не наследуются, не содержат параметров и модификаторов доступа и прямое обращение к ним невозможно. Вызов можно осуществлять косвенно, форсируя загрузку класса. Для операций со статическими переменными наличие static-блока в классе необязательно. Statiс-переменные - это переменные класса, а не объекта. Можете считать их глобальными в пределах всех экземпляров класса, так как они существуют в единственном экземпляре. Будут ли они глобальными в каком-либо другом контексте, зависит от модификаторов доступа этих переменных. |
| Автор: Gunslinger 29.4.2010, 09:20 |
| jk1, до этого с шарп изучал -- сейчас нужно в ява быстро втянуться. Поэтому отталкиваюсь от с шарп (Эккеля только начал читать). Отсюда и статик-конструктор. Раз в яве таких нет, то что же инициализирует статик-поля? Особенно, если они private static? |
| Автор: jk1 29.4.2010, 10:17 | ||||
Во-первых, static-поля можно инициализировать в объявлении, чаще всего так и поступают
Во-вторых, можно использовать уже упоминавшийся static-блок, который будет выполнен при загрузке класса. Таких блоков может быть любое количество, порядок выполнения будет соответствовать порядку описания:
Ну и наконец никто не мешает присваивать значения этим переменным в любом месте кода, откуда позволяют модификаторы доступа. |
| Автор: MaxPayneC 29.4.2010, 13:41 |
| Статические поля и методы класса можно использовать в инстанс-методах этого класса (и других, если модификаторы доступа позволяют). |