Man kann eine Klasse dynamisch mit dieser Methode von java.lang.Class
laden:
Nach der JavaDoc , der zweite Parameter wird verwendet, um das Timing der Klasseninitialisierung (Ausführung des statischen Initialisierungscodes) zu steuern. Wenn true
, wird die Klasse nach dem Laden und während der Ausführung dieser Methode initialisiert; Wenn false
, wird die Initialisierung verzögert, bis die Klasse das erste Mal verwendet wird.
Nun, ich verstehe das alles, aber die Dokumente sagen nicht, wie sie entscheiden sollen, welche Strategie sie verwenden sollen. Ist es besser, die Initialisierung immer sofort durchzuführen? Ist es besser, den ersten Gebrauch immer zu verzögern? Kommt es auf die Umstände an?
Ja, das hängt von den Umständen ab, aber normalerweise ist es vorzuziehen, dass Klassen erst beim ersten Gebrauch geladen und initialisiert werden.
Fälle, in denen Sie diese möglicherweise frühzeitig initialisieren möchten (z. B. durch Aufrufen von forName()
für sie):
HTTPUrlConnection
zwischengespeichert den HTTP-Benutzer-Agent, der von System.getProperty("http.agent")
zurückgegeben wird. Wenn es zum ersten Mal verwendet wird, wird sein Wert zwischengespeichert und wenn Sie es ändern (mit like System.setProperty()
), wird der neue Wert nicht verwendet. Sie können ein solches Caching erzwingen, wenn Sie die richtigen Klassen frühzeitig initialisieren und sie so schützen, dass sie später vom Code geändert werden können. Fälle, in denen Sie nicht frühzeitig initialisieren sollten:
AboutDialog
), weil dies ein seltener Fall ist und in den meisten Läufen wird der Benutzer dies nicht tun / brauchen. Tags und Links java classloader