Объяснение того, как classloader загружает статические переменные

Я использую версию NCover, который идет TestDriven.NET . Это позволит Вам легко щелкать правой кнопкой по своей библиотеке классов модульного теста и совершать нападки Тест With→ Покрытие , и это потянет отчет.

9
задан Tom Hawtin - tackline 15 July 2009 в 20:04
поделиться

2 ответа

Да, короче говоря, это линейно.

«На самом деле компилятор внутренне производить единый класс процедура инициализации, которая объединяет все инициализаторы статических переменных и весь статический инициализатор блоки кода в том порядке, в котором они появляются в объявлении класса. Эта выполняется единая процедура инициализации автоматически, только один раз, когда сначала загружается класс. "

Вкратце из Java.

http://www.developer.com/java/other/article.php/2238491

Вы должны определить переменные, а затем инициализировать их в статическом блоке инициализатора в правильном порядке, или вы можете поменять порядок операторов следующим образом:

private static final int [][] LIST_INTEGER = new int [][] { {947,947}, {110,103}, 
        {947,958}, {110,120}, 
        {947,954}, {103,107}, 
        {947,967}, {110,99,104}};

private static final String [] LIST_CODE = gerarListCode(); 
11
ответ дан 4 December 2019 в 13:49
поделиться

JVM действительно инициализирует статические поля в том порядке, в котором они встречаются.

Статические поля класса инициализируются, когда JVM впервые встречает класс. Согласно Java Puzzlers , головоломка 49 (которая продолжает ссылаться на JLS 4.12.5), для статических полей сначала устанавливаются значения по умолчанию. Для переменных объекта установлено значение null , int s установлено значение 0 и т. Д. После этого их инициализаторы выполняются в порядке появления.

Итак, в вашем примере, LIST_CODE и LIST_INTEGER сначала устанавливаются в null . Затем LIST_CODE инициализируется вызовом gerarListCode () . LIST_INTEGER по-прежнему null , когда этот метод выполняется. Только после этого

4
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: