Задача легкая, но подскажите почему компилятор не дает написать так:
static {
public static int C = 5/A;
}
или так:
static {
static int C = 5/A;
}
Можно только так:
static {
int C = 5/A;
}
TIPUN
17 уровень
Вопрос по статическому блоку инициализации
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Eternal Fire
28 июня 2025, 12:10
В Java статический блок (static { … }) — это не место для объявлений полей класса, а просто набор выполняемых при загрузке класса операторов. В нём разрешены:
1. обычные операторы (присваивания, вызовы методов и т. д.),
2. объявления локальных переменных (например, int x = 5;),
но не объявления полей класса.
Почему нельзя
Область объявления поля
Поля (public static int C;, private int x; и т. п.) можно объявлять только на уровне класса, вне любых методов или блоков.
Модификаторы
Внутри блоков (будь то static {} или {}) вы пишете код, который выполняется при инициализации, а не объявляете члены класса. Локальные переменные внутри блока не могут иметь модификаторы доступа (public, static, final и т. д.).
+1
hidden #3303140
28 июня 2025, 14:44
Странно, что тебя заминусили
0
Денис Enterprise Java Developer
28 июня 2025, 14:47
А смысл повторять твой ответ?
0
hidden #3303140
27 июня 2025, 22:33
Ты объявил переменную внутри статического блока, значит она будет существовать только пока будет выполняться этот блок. Это локальная переменная, она не может быть ни публичной, ни статической. Это касается любого блока кода: хоть тела цикла, хоть условного блока, хоть статического блока - вообще любой пары фигурных скобок в коде. Когда программа дойдёт до закрывающей скобки, переменную уничтожит сборщик мусора. И извне к ней обратиться тоже нельзя.
Это называется областью видимости (скоупом, skope) переменной.
+4