Z prostym przykładem, takim jak twój, nic złego się nie dzieje. Jednakże jest możliwe pole final
być widoczne jako zainicjalizowana jeśli używasz wątpliwych praktyk, takich jak wywołanie metody przeciążać w konstruktorze.
Na przykład poniższy program wyświetla "Mój ulubiony kolor ma wartość NULL", mimo że odwołuje się do ostatecznej zmiennej favouriteColour
, która jest ustawiona w konstruktorze na "blue"
.
abstract class SuperClass {
final String favouriteColour;
SuperClass() {
announceFavouriteColour();
favouriteColour = "blue";
}
abstract void announceFavouriteColour();
}
public class FinalTest extends SuperClass {
void announceFavouriteColour() {
System.out.println("My favourite colour is " + favouriteColour);
}
public static void main(String[] args) {
new FinalTest();
}
}
Dzięki! A to prowadzi do http://stackoverflow.com/questions/2547713/why-static-fields-are-not-initialized-in-time –
to jest z dawno temu, ale ja po prostu chcę powiedzieć, że choć może to tak się nie dzieje, to mi się przydarza. Jedyne, co mogę myśleć, to to, że to GWT, z którym mam do czynienia, więc to Java jest skompilowana krzyżowo z JScriptem. – Jamie