Heim > Java > javaLernprogramm > Hauptteil

Was ist der Unterschied zwischen new und newInstance in Java?

不言
Freigeben: 2018-09-21 16:33:34
Original
2130 Leute haben es durchsucht

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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 >

1. Codeverwendung:

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage