Zufällig habe ich eine Möglichkeit gesehen, ein Objekt zu initialisieren:
// 新建一个列表,并赋值 "Harry","Tony","Tom" ArrayList<String> friends = new ArrayList<String>() {{ add("Harry"); add("Tony"); add("Tom"); }};
Natürlich wird die gleiche Initialisierungsmethode auch für die Map-Sammlung verwendet:
// 新建一个Map,并赋值 Map<String, Object> cat = new HashMap<String, Object>() {{ put("name", "Tom"); put("age", 10); }};
Hier wird die Syntax der inneren Klasse verwendet, als das Objekt zuerst neu zu erstellen und dann der Reihe nach hinzuzufügen, viel bequemer und prägnanter. Diese Methode wird als „Initialisierung mit doppelter Klammer“ (Initialisierung mit doppelter Klammer) bezeichnet.
Nehmen Sie die Initialisierung von ArrayList als Beispiel. Die erste Schicht aus geschweiften Klammern definiert zunächst eine anonyme interne Klasse, die von ArrayList geerbt wurde Initialisierungsblock)
ArrayList<String> friends = new ArrayList<String>() { // 这里什么操作都没有,全部继承自父类(ArrayList) };
Wir erhalten eine Instanziierung der Unterklasse von ArrayList über new und wandeln sie dann in eine Referenz auf ArrayList um
new ArrayList<String>() { // 这里什么操作都没有,全部继承自父类(ArrayList) };
Überprüfen Sie zunächst die .class-Dateien, die durch verschiedene Initialisierungsmethoden generiert wurden.
Zum Beispiel der folgende Code:
ArrayList<String> friends = new ArrayList<String>() {{}};
Test1 Die generierte .class-Liste nach der Kompilierung lautet:
Test1$1.classTest1$2.classTest1$3 .class
Es wird nur 1 .class-Datei generiert
Test1 $ 4.CLASS
TEST1 $ 5. CLASS
& HELLIP; & HELLIP;
& HELLIP; SNIP & HELLIP; Kompilierung Die .class-Liste lautet:
Test2.class
Laufzeit
Das erste ausgeführte Code-Ergebnis von Test1:
1508379452224
1508379452784
Laufzeit: 560 Millisekunden Das Ergebnis der zweiten Ausführung von Code Test2:
1508379671505Die Laufzeit beträgt: 2 MillisekundenObwohl sich diese Zeitlücke je nach Computerleistung und Betriebsstatus ändert, kann sie auch die doppelte Hauptursache erklären Die Initialisierungsmethode mit Klammern dauert länger als die herkömmliche MethodeZusammenfassend lässt sich sagen, dass die Initialisierungsmethode mit doppelten Klammern weniger effizient ist als die herkömmliche Methode (wenn die Testinitialisierungsdaten geringer sind (die Liste hat den kritischen Punkt für die automatische Inkrementierung nicht erreicht)):1508379671507
1. Die Initialisierungsmethode mit doppelter Klammer generiert mehr .class-Dateien als die herkömmliche Methode
2 Die Ausführung mit der Initialisierungsmethode mit doppelter Klammer dauert länger als die herkömmliche Methode
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Initialisierung mit doppelten Klammern in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!