Kiedy JVM sprawdza czy istnieje klasa

0

Uruchomiłem w konsoli program desktopowy (klasy luzem, bez jara). Klasy o nazwie Triangle brakowało - nie była potrzebna na starcie programu. Program wystartował i w odpowiednim momencie (obsługa zdarzenia) rzucił wyjątkiem NoClassDefFoundError. Ponieważ program nadal działał, to dorzuciłem do katalogu bieżącego brakującą klasę. Nie pomogło, program nadal rzucał wyjątkiem. Dopisałem do kodu fragment

Class.forName("Triangle");

i powtórzyłem eksperyment (program startuje bez klasy Triangle, potem ją dorzucam). Okazuje się, że Class.forName("Triangle"); nie rzuca wtedy wyjątkiem.

0

Class.forName to mechanizm dynamiczny. Sprawdza istnienie w momencie wywołania. W przeciwnym przypadku sprawdzenie następuje w momencie pierwszego użycia, czyli zazwyczaj:

  1. Tworzysz obiekt klasy, która jest w tym samym pakiecie.
  2. Wywołujesz metodę statyczną klasy, która w zadeklarowanych importach ma daną klasę.

Mówiąc prościej jak JVM natknie się pierwszy raz na daną klasę w bytecodzie to ją ładuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1