Почему статический блок в классе не выполняется, когда я не создаю ссылочную переменную для объекта (анонимного) этого класса?Статический блок не выполняется в случае анонимных объектов
Например, давайте рассмотрим этот простой класс:
public class StaticDemo {
private static int x;
public static void display(){
System.out.println("Static Method: x = "+x);
}
static {
System.out.println("Static Block inside class");
}
public StaticDemo(){
System.out.println("Object created.");
}
}
Другой класс, используя его:
public class UseStaticDemo {
public static void main(String[] args) {
StaticDemo Obj = new StaticDemo();
Obj.display();
System.out.println("------------");
new StaticDemo().display();
}
}
Выход:
Static Block inside class
Object created.
Static Method: x = 0
------------
Object created.
Static Method: x = 0
Пожалуйста, прочитайте немного о статических блоках, если вы еще этого не сделали. Кроме того, попробуйте запустить тот же код, но замените объект anon ссылкой. Тогда это станет ясно. Ответ лежит на самом коде. –
@BoratSagdiyev Как указано ниже, объект, на который делается ссылка или анонимный, не имеет никакого отношения к выполняемому статическому блоку. Он будет выполняться один раз всякий раз, когда класс загружается первым. – UrsinusTheStrong
Это точно моя точка. Ваш результат будет таким же, даже если вы использовали не-анонимный объект. Таким образом, вы можете получить ответ самостоятельно, не спрашивая здесь. Но всегда с удовольствием спрашивайте. –