Den Unterschied zwischen „Class.forName()“ und „Class.forName().newInstance()“ verstehen: Eine umfassende Erklärung
Die Java-Sprache bietet mehrere Methoden zum Instanziieren von Klassen. Zwei häufig verwendete Methoden sind „Class.forName()“ und „Class.forName().newInstance()“. Obwohl sie Ähnlichkeiten aufweisen, gibt es einen erheblichen Unterschied zwischen ihrer Funktionalität.
Class.forName()
Die Methode „Class.forName()“ erfordert eine vollständig qualifizierte Methode Klassennamen als Argument und gibt ein „Class“-Objekt zurück, das diese Klasse darstellt. Dieses Objekt stellt Metadaten über die Klasse bereit, einschließlich Informationen zu ihren Feldern, Methoden und Konstruktoren. Es wird jedoch nicht tatsächlich eine Instanz der Klasse erstellt.
Class.forName().newInstance()
Im Gegensatz dazu „Class.forName(). newInstance()“ nimmt das von „Class.forName()“ zurückgegebene „Class“-Objekt und versucht, mithilfe des Standardkonstruktors eine neue Instanz der entsprechenden Klasse zu erstellen. Bei Erfolg wird ein Verweis auf das neu erstellte Objekt zurückgegeben. Hier liegt der Hauptunterschied zwischen den beiden Methoden: „Class.forName()“ gibt nur ein „Class“-Objekt zurück, während „Class.forName().newInstance()“ eine tatsächliche Instanz erstellt.
Beispiel:
Betrachten Sie den folgenden Java-Code:
package com.example; public class DemoClass { public DemoClass() { System.out.println("DemoClass instantiated"); } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { // Get the Class object Class clazz = Class.forName("com.example.DemoClass"); // Create an instance DemoClass instance = (DemoClass) clazz.newInstance(); } }
Wenn dieser Code ausgeführt wird, gibt „Class.forName("com.example.DemoClass")" das „ Class“-Objekt, das der Klasse „DemoClass“ zugeordnet ist. Anschließend erstellt „clazz.newInstance()“ eine neue Instanz der Klasse „DemoClass“ und ruft deren Standardkonstruktor auf, der „DemoClass instanziiert“ ausgibt.
Dynamisches Laden der Klasse:
Ein wesentlicher Vorteil von „Class.forName()“ ist seine Fähigkeit, Klassen zur Laufzeit dynamisch zu laden. Angenommen, Ihre Anwendung muss eine Klasse basierend auf Benutzereingaben oder -konfigurationen instanziieren. In diesem Fall können Sie „Class.forName()“ verwenden, um diese Klasse dynamisch zu laden und eine Instanz zu erstellen, ohne den Klassennamen fest zu codieren.
Fazit:
Zusammenfassend liegt der Unterschied zwischen „Class.forName()“ und „Class.forName().newInstance()“ in ihrem Zweck. „Class.forName()“ gibt ein „Class“-Objekt zurück, das Metadaten über die Klasse bereitstellt. Im Gegensatz dazu erstellt „Class.forName().newInstance()“ eine neue Instanz der Klasse mithilfe des Standardkonstruktors, ähnlich dem herkömmlichen „new“-Operator.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „Class.forName()' und „Class.forName().newInstance()' in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!