Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 277

Dane są trzy klasy (A, B i C), takie, że B dziedziczy po A, a C dziedziczy po B oraz w każdej z tych klas istnieje jeden statyczny blok inicjalizujący. Zakładając, że kod new C() nie jest poprzedzony żadnym odwołaniem do powyższych klas, jaka jest kolejność wywołania tych trzech statycznych bloków inicjalizujących?

Uczestnik szkolenia
  • Zapytał
  • @ Uczestnik szkolenia | 25.06.2013

Odpowiedź (1)

  • 0

Zgodnie z dokumentacją Javy statyczny blok inicjalizujący wykonywany jest podczas ładowania klasy do pamięci operacyjnej. Zanim jednak załadowana zostanie klasa C, musi zostać załadowana klasa B. Ta z kolei wymusi wcześniej załadować klasę A, z której korzysta. W związku z tym najpierw wywołany zostanie statyczny blok inicjalizujący z klasy A, a następnie z klasy B i C. Podobnie będzie wyglądała kolejność w przypadku przypisywania początkowych wartości atrybutów statycznych i niestatycznych bloków inicjalizujących klas A, B i C. Naturalnie w przypadku tworzenia instancji klasy C, na samym początku zostanie wywołany konstruktor klas C, który jednak przed wszystkimi innymi operacjami wykona konstruktor klasy B, a ten z kolei zrobi to samo dla konstruktora klasy A. Warto też pamiętać, że jeżeli konstruktor nadklasy B nie jest wywoływany jawnie w konstruktorze klasy C, to wywoływany jest domyślny konstruktor B i w razie braku takiego konstruktora wyrzucany jest wyjątek.

  • Odpowiedział
  • @ | 25.06.2013
  • TRENER ALTKOM AKADEMII