Java-Reihenfolge der Initialisierung und Instanziierung

Bin ich versucht, Stück zusammen den Prozess der Initialisierung und Instanzierung in der JVM, aber die JLS ist ein wenig stumpf auf ein paar Einzelheiten, also wenn jemand was dagegen hätte, Aufräumarbeiten einige details, es wäre zu schätzen. Dies ist, was ich in der Lage gewesen, um herauszufinden, so weit.

Initialisierung

  1. Rekursiv Initialisiert static final-Variablen der Klasse und deren Schnittstellen, sind compile-Zeit-Konstanten.
  2. Wieder aus der Rekursion-Verarbeitung statische Blöcke und statische Felder in textueller Reihenfolge.

Instanziierung

  1. Rekursiv Initialisiert Letzte Instanz-Variablen der Klasse sind, die compile-Zeit-Konstanten.
  2. Wieder aus der Rekursion-Verarbeitung von nicht-statische Blöcke und Instanz-Felder in textlicher voranstellen, um Sie in die Konstruktoren, wie es gibt.

Okay, nun also die Fragen stellen.

  1. sind Schnittstellen verarbeitet in der Reihenfolge der Deklaration?
  2. sind Schnittstellen verarbeitet in einem separaten recursive-stack?

    a) wenn ja, Schnittstellen verarbeitet vor oder nach der Oberklassen?

    b) wenn ja, bin ich richtig in der Aufzucht, dass der eine oder andere (Interface oder Superklasse) erhält seine nicht-compile-Zeit-Konstante Felder initialisiert, bevor die anderen compile-Zeit-Konstanten.

  3. Welche Rolle spielt die Aufrufe der standardmäßige super () - Konstruktor spielen in diesem Prozess?
  4. Täusche ich mich in irgendeiner meiner Aussagen?
  5. Fehlen mir andere wichtige details?
Schnittstellen haben nichts damit zu initialisieren. Es sei denn, Sie verwenden das Wort in einer anderen Weise als ich es gewohnt bin.
Schnittstellen public static final Felder. Wenn diese Felder sind Objekte mit einer Initialisierung (z.B. public static final ArrayList<String> someStrings = new ArrayList<>();) dann wäre ein Teil der Initialisierung.

InformationsquelleAutor user3056052 | 2014-04-15

Schreibe einen Kommentar