Wird der Objektkonstruktor beim Erstellen eines Arrays in Java aufgerufen?

8

In Java ist ein Array ein Objekt. Meine Frage ist ... wird ein Object-Konstruktor aufgerufen, wenn neue Arrays erstellt werden? Wir möchten diese Tatsache verwenden, um den Objektkonstruktor mit einem zusätzlichen Bytecode zu belegen, der die Länge des zu konstruierenden Arrays überprüft. Würde das funktionieren?

    
Peter Štibraný 23.01.2009, 22:37
quelle

5 Antworten

1

Was die Java-Sprachspezifikation betrifft, obwohl beide das new -Schlüsselwort verwenden, Klasseninstanz-Erstellungsausdrücke und Array Creation Expressions sind verschiedene Ausdrucksformen mit jeweils eigenen Regeln. Die Beschreibung von Array Creation Expressions erwähnt nicht den Aufruf eines Konstruktors.

    
Patricia Shanahan 15.06.2014, 15:57
quelle
6

Nach der JVM-Spezifikation : "Arrays werden erstellt und manipuliert mit einer bestimmten Reihe von Anweisungen. " Während also Arrays Instanzen von Objekten sind, werden sie nicht auf die gleiche Weise initialisiert wie andere Objekte (was Sie sehen können, wenn Sie von diesem Link-Anker nach oben scrollen).

    
kdgregory 23.01.2009 22:54
quelle
0

Ich glaube nicht, weil Sie kein natives Array ableiten können, um den Konstruktor zu überschreiben

    
Fernando Miguélez 23.01.2009 22:43
quelle
0

Sie können die Byte-Code-Manipulation verwenden, um die Überprüfung dort zu platzieren, wo immer ein neues Array erstellt wird.

    
Peter Lawrey 23.01.2009 22:56
quelle
0

Nein. Ich habe das auf der AspectJ-Mailingliste gefunden: Ссылка .

Sie fragen wahrscheinlich nach Arrays aus einem Grund, aber wenn Sie können, warum nicht zu den Collection-Klassen wechseln. Das gibt Ihnen viele Möglichkeiten, abzufangen und Validierungen durchzuführen.

    
Stefan Arentz 23.01.2009 23:26
quelle