Heim >Java >javaLernprogramm >Was ist der Unterschied zwischen „Class.forName()' und „Class.forName().newInstance()' in Java?

Was ist der Unterschied zwischen „Class.forName()' und „Class.forName().newInstance()' in Java?

DDD
DDDOriginal
2024-11-08 17:34:02595Durchsuche

What's the difference between

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn