forName ist eine statische Methode der Klasse "Class". Wir benötigen den vollständig qualifizierten Namen der gewünschten Klasse. Dies kann verwendet werden, wenn der Name der Klasse zur Laufzeit bekannt wird.
%Vor%.class ist keine Methode, es ist ein Schlüsselwort und kann mit einem primitiven Typ wie int verwendet werden. wenn Name der Klasse im Voraus bekannt ist & amp; Es wird zum Projekt hinzugefügt, wenn wir ClassName.class
verwendenIch habe den Unterschied zwischen
MyClass.class
undClass.forName("className")
nicht verstanden.Weil beide den Klassennamen benötigen.
Der große Unterschied ist wenn sie brauchen. Da Class.forName
eine Zeichenfolge akzeptiert, kann der Klassenname zur Laufzeit festgelegt werden. Natürlich wird MyClass.class
zur Kompilierzeit bestimmt. Dies macht Class.forName
nützlich für das dynamische Laden von Klassen basierend auf der Konfiguration (zum Beispiel das Laden von Datenbanktreibern abhängig von den Einstellungen einer Konfigurationsdatei).
Abgerundet: obj.getClass()
ist nützlich, weil Sie die tatsächliche Klasse eines Objekts möglicherweise nicht kennen - beispielsweise in einer Methode, bei der Sie ein Argument über eine Schnittstelle und nicht über eine Klasse akzeptieren, z. B. in foo(Map m)
. Sie kennen die Klasse von m
nicht, nur dass sie Map
implementiert. (Und 99% der Zeit, Sie sollten sich nicht kümmern, was seine Klasse ist, aber dass 1% gelegentlich auftaucht.)
Sie lädt die Klasse basierend auf der vollständig qualifizierten Klassennamen-Zeichenfolge dynamisch.
%Vor%Gibt das java.lang.Class-Objekt zurück, das die Laufzeitklasse des Objekts darstellt.
%Vor% A class
literal ist ein Ausdruck, der aus dem Namen einer Klasse, Schnittstelle, Array,
oder primitiver Typ oder der Pseudotyp void, gefolgt von a
'.' und die Tokenklasse.
Der Typ von C.class
, wobei C der Name einer Klasse, einer Schnittstelle oder eines Array-Typs ist, ist Class<C>
.
Tags und Links java reflection