NullPointerException со статическими переменными

Я просто ударил очень странное (для меня) поведение Java. У меня есть следующие классы:

public abstract class Unit {
    public static final Unit KM = KMUnit.INSTANCE;
    public static final Unit METERS = MeterUnit.INSTANCE;
    protected Unit() {
    }
    public abstract double getValueInUnit(double value, Unit unit);
    protected abstract double getValueInMeters(double value);
}

А также:

public class KMUnit extends Unit {
    public static final Unit INSTANCE = new KMUnit();

    private KMUnit() {
    }
//here are abstract methods overriden
}

public class MeterUnit extends Unit {
    public static final Unit INSTANCE = new MeterUnit();

    private MeterUnit() {
    }

///abstract methods overriden
}

И мой контрольный пример:

public class TestMetricUnits extends TestCase {

    @Test
    public void testConversion() {
        System.out.println("Unit.METERS: " + Unit.METERS);
    System.out.println("Unit.KM: " + Unit.KM);
    double meters = Unit.KM.getValueInUnit(102.11, Unit.METERS);
    assertEquals(0.10211, meters, 0.00001);
    }
}
MKUnit и MeterUnit оба синглтона инициализируются статически, поэтому во время загрузки класса. Конструкторы являются частными, поэтому их нельзя инициализировать где-либо еще.Класс блока содержит статическийокончательный ссылки на MKUnit.INSTANCE и MeterUnit.INSTANCE

Я ожидаю, что:

Класс KMUnit загружен и экземпляр создан.Класс MeterUnit загружен и экземпляр создан.Класс модуля загружен, и переменные KM и METERS инициализированы, они являются окончательными, поэтому их нельзя изменить.

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

 T E S T S

Running de.audi.echargingstations.tests.TestMetricUnits<br/>
Unit.METERS: m<br/>
Unit.KM: null<br/>
Tests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.089 sec <<< FAILURE! - in de.audi.echargingstations.tests.TestMetricUnits<br/>
testConversion(de.audi.echargingstations.tests.TestMetricUnits)  Time elapsed: 0.011 sec  <<< ERROR!<br/>
java.lang.NullPointerException: null<br/>
        at <br/>de.audi.echargingstations.tests.TestMetricUnits.testConversion(TestMetricUnits.java:29)
<br/>

Results :

Tests in error:
  TestMetricUnits.testConversion:29 NullPointer

И самое смешное, что когда я запускаю этот тест из Eclipse через JUnit Runner, все в порядке, у меня нетNullPointerException и в консоли у меня есть:

Unit.METERS: m
Unit.KM: km

Таким образом, вопрос: что может бытьпричина, по которой переменная KM в модуле равна нулю (и в то же время METERS не равен нулю)

Ответы на вопрос(2)

Ваш ответ на вопрос