2014-10-12 3 views
0

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

Например, давайте рассмотрим этот простой класс:

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 
+0

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

+0

@BoratSagdiyev Как указано ниже, объект, на который делается ссылка или анонимный, не имеет никакого отношения к выполняемому статическому блоку. Он будет выполняться один раз всякий раз, когда класс загружается первым. – UrsinusTheStrong

+1

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

ответ

5

static инициализатор блок запускается только один раз, когда класс loaded and initialized.

Кроме того, методы static абсолютно не имеют отношения к каким-либо экземплярам. Добыча

new StaticDemo().display(); 

Бессмысленно и неясно.

+0

Да, вы пишете. Статический блок будет выполняться только один раз. Сохраняя только «новый StaticDemo(). Display();» в коде, статический блок действительно выполнялся. – UrsinusTheStrong

Смежные вопросы