Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Нестатический метод использует статик-поле


Автор: Gunslinger 28.4.2010, 20:00
В классе есть static-поле и обычный метод, в котором используется это поле. 
1.Чтобы его использовать необходимо вызывать статик-конструктор? 
2. Статик-конструктор автоматически не вызывается?smile
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-поля можно инициализировать в объявлении, чаще всего так и поступают
Код

private static String sample = "Sample";
 
Во-вторых, можно использовать уже упоминавшийся static-блок, который будет выполнен при загрузке класса. Таких блоков может быть любое количество, порядок выполнения будет соответствовать порядку описания:
Код

private static String sample;
private static String oneMoreSample;

static{
     sample = "Sample";
}

static{
     oneMoreSample = sample;
}

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

Автор: Gunslinger 29.4.2010, 12:43
Цитата(jk1 @  29.4.2010,  10:17 Найти цитируемый пост)
Ну и наконец никто не мешает присваивать значения этим переменным в любом месте кода, откуда позволяют модификаторы доступа. 

Значит можно и в самом методе экземпляра, который использует это поле? В с шарп если есть статик-поля, которые используют методы экземпляра, то предварительно нужно вызвать статик-конструктор.

Автор: MaxPayneC 29.4.2010, 13:41
Статические поля и методы класса можно использовать в инстанс-методах этого класса (и других, если модификаторы доступа позволяют).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)