NullPointerException con variables estáticas

Acabo de golpear un comportamiento muy extraño (para mí) de Java. Tengo las siguientes clases:

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);
}

Y:

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
}

Y mi caso de prueba:

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 y MeterUnit son ambos singletons inicializados estáticamente, por lo que durante la carga de clases. Los constructores son privados, por lo que no se pueden inicializar en ningún otro lugar.La clase de unidad contiene estáticafinal referencias a MKUnit.INSTANCE y MeterUnit.INSTANCE

Yo esperaría que:

Se carga la clase KMUnit y se crea la instancia.La clase MeterUnit se carga y se crea la instancia.La clase de unidad se carga y tanto la variable KM como METERS se inicializan, son finales, por lo que no se pueden cambiar.

Pero cuando ejecuto mi caso de prueba en la consola con Maven mi resultado es:

 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

Y lo gracioso es que cuando ejecuto esta prueba desde eclipse a través del corredor JUnit todo está bien, no tengoNullPointerException y en la consola tengo:

Unit.METERS: m
Unit.KM: km

Entonces la pregunta es: ¿qué puede ser elrazón por la que la variable KM en la unidad es nula (y al mismo tiempo METERS no es nulo)

Respuestas a la pregunta(2)

Su respuesta a la pregunta