Блок инициализации с расширением - PullRequest
1 голос
/ 24 марта 2012

Вот мой фрагмент кода, где я доверяю блокам инициализации

class Father{
Father() {
    System.out.println("Father constructor runs...");
}
static {System.out.println("static init block of Father...");}
{System.out.println("instance init block of Father...");}
}

class Child extends Father {
Child () {
    System.out.println("Child constructor runs...");
}
static {System.out.println("static init block of Child ...");}
{System.out.println("instance init block of Child ...");}
public static void main (String[] argv) {
    new Child();
} 

}

Два класса скомпилированы в один файл класса: Child.class Я запускаю его с командной строки java Child

это мой вывод:

static init block of Father...
static init block of Child ...
static init block of Child ...
instance init block of Father...
Father constructor runs...
instance init block of Child ...
Child constructor runs...

У меня все в порядке с этим выводом, за исключением того факта, что «статический блок инициализации Child ...» печатается дважды. Из документации Java я прочитал «Статические блоки инициализации запускаются ОДИН РАЗ, когда класс загружается впервые».

Значит ли это, что мой класс Child загружается дважды ??

Любая помощь приветствуется Спасибо Alberto

1 Ответ

2 голосов
/ 24 марта 2012

Невозможно воспроизвести - вот вывод, который я получаю из вашего кода, запустив его из командной строки:

static init block of Father...
static init block of Child ...
instance init block of Father...
Father constructor runs...
instance init block of Child ...
Child constructor runs...

Вы не сказали, как работает код, но я подозреваю, что либо вывод не совсем то, что вы думаете, или вы запускаете его каким-то странным образом.

Ваши ожидания верны: блоки статического инициализатора должны запускаться только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...