Unterschied zwischen MyClass.class und Class.forName ("Klassenname")

7

Wir können Klasse Klassenobjekt mit 3 Methoden erhalten:

  • MyClass.class
  • obj.getClass
  • Class.forName ("Klassenname")

Ich habe den Unterschied zwischen MyClass.class und Class.forName("className") nicht verstanden.

Weil beide den Klassennamen benötigen.

    
Neal 18.06.2012, 04:47
quelle

4 Antworten

11
%Vor%

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

verwenden     
swapy 18.06.2012, 04:49
quelle
8
  

Ich habe den Unterschied zwischen MyClass.class und Class.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.)

    
T.J. Crowder 18.06.2012 04:53
quelle
1
%Vor%

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> .

Ссылка

    
amicngh 18.06.2012 05:35
quelle
1

Ein wichtiger Unterschied ist: A.class führt das Laden und Verknüpfen der Klasse A durch. Class.forName ("A") führt das Laden, Verknüpfen und Initialisieren der Klasse A durch.

    
javdev 28.08.2014 06:31
quelle

Tags und Links