Я использую версию NCover, который идет TestDriven.NET . Это позволит Вам легко щелкать правой кнопкой по своей библиотеке классов модульного теста и совершать нападки Тест With→ Покрытие , и это потянет отчет.
Да, короче говоря, это линейно.
«На самом деле компилятор внутренне производить единый класс процедура инициализации, которая объединяет все инициализаторы статических переменных и весь статический инициализатор блоки кода в том порядке, в котором они появляются в объявлении класса. Эта выполняется единая процедура инициализации автоматически, только один раз, когда сначала загружается класс. "
Вкратце из 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();
JVM действительно инициализирует статические поля в том порядке, в котором они встречаются.
Статические поля класса инициализируются, когда JVM впервые встречает класс. Согласно Java Puzzlers , головоломка 49 (которая продолжает ссылаться на JLS 4.12.5), для статических полей сначала устанавливаются значения по умолчанию. Для переменных объекта установлено значение null
, int
s установлено значение 0 и т. Д. После этого их инициализаторы выполняются в порядке появления.
Итак, в вашем примере, LIST_CODE
и LIST_INTEGER
сначала устанавливаются в null
. Затем LIST_CODE
инициализируется вызовом gerarListCode ()
. LIST_INTEGER
по-прежнему null
, когда этот метод выполняется. Только после этого