Der Inhalt dieses Artikels befasst sich mit der Frage, was der Unterschied zwischen new und newInstance in Java ist. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
Was ist der Unterschied zwischen newInstance() und new?
Es gibt einen Unterschied zwischen der Verwendung von newInstance und der Verwendung von new Ersteres verwendet den Klassenlademechanismus. Warum gibt es also zwei Möglichkeiten, Objekte zu erstellen? Dies muss aus der Perspektive von Softwareideen wie Skalierbarkeit, Erweiterbarkeit und Wiederverwendbarkeit erklärt werden.
Das Factory-Muster in Java verwendet häufig newInstance zum Erstellen von Objekten, sodass Sie auch spezifische Antworten darauf finden können, warum Sie das Factory-Muster verwenden sollten.
Zum Beispiel:
Class c = Class.forName(“A”); factory = (AInterface)c.newInstance();
wobei AInterface die Schnittstelle von A ist. Wenn es so geschrieben ist, verstehen Sie vielleicht:
String className = “A”; Class c = Class.forName(className); factory = (AInterface)c.newInstance();
Außerdem, wenn ja Unten geschrieben, vielleicht verstehen Sie, dass Sie verstehen werden:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串 Class c = Class.forName(className); factory = (AInterface)c.newInstance();
Der obige Code eliminiert den Namen der Klasse A. Vorteile: Unabhängig davon, wie sich Klasse A ändert, bleibt der obige Code unverändert und kann sogar ersetzt werden Die Geschwisterklassen von A, B, C, D usw., sofern sie Ainterface erben.
Aus der Sicht von JVM muss die neue Klasse nicht geladen werden.
Aber wenn wir newInstance verwenden, müssen wir Folgendes sicherstellen:
Diese Klasse wurde geladen;
2. Es ist die statische Methode forName () der Klasse, die die beiden oben genannten Schritte ausführt. Diese statische Methode ruft den Startklassenlader auf (dh den Lader, der die Java-API lädt).
Mit dem obigen Verständnis von JVM können wir sagen, dass newInstance die neue Methode tatsächlich in zwei Schritte zerlegt, dh zuerst die Klassenlademethode aufruft, um eine bestimmte Klasse zu laden, und sie dann instanziiert.
Die Vorteile dieses schrittweisen Ansatzes liegen auf der Hand. Wir können eine größere Flexibilität erlangen, wenn wir die statische Lademethode forName der Klasse aufrufen, was uns eine Möglichkeit zur Entkopplung bietet.
[Ergänzung:]
newInstance: Schwacher Typ. Ineffizient. Es können nur Konstruktoren ohne Parameter aufgerufen werden.
neu: Stark getippt. Relativ effizient. Kann jeden öffentlichen Konstruktor aufrufen.
newInstance() ist eine unvermeidliche Wahl für die Implementierung technischer Methoden wie IOC, Reflektion, schnittstellenorientierte Programmierung und Abhängigkeitsinversion. new kann nur die Instanziierung bestimmter Klassen implementieren und ist nicht für die Schnittstellenprogrammierung geeignet.
Ein Objekt wird über den Standardkonstruktor dieser Klasse erstellt. Wenn keine Berechtigung zum Zugriff auf den Standardkonstruktor vorhanden ist, wird eine IllegalAccessException ausgelöst >
Es ist ersichtlich, dass new und newInstance den gleichen Effekt haben.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen new und newInstance in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!