Heim  >  Artikel  >  Java  >  Beispiel für die gemeinsame Nutzung der Konstruktorinitialisierung in Java

Beispiel für die gemeinsame Nutzung der Konstruktorinitialisierung in Java

黄舟
黄舟Original
2017-09-15 10:44:431424Durchsuche

In diesem Artikel wird hauptsächlich die Konstruktorinitialisierung in Java anhand von Beispielen analysiert. Der Code ist sehr einfach und die Beschreibung ist klar.

1. Initialisierungssequenz
Wenn Java ein Objekt erstellt, weist das System zunächst Speicher für alle Instanzattribute des Objekts zu (vorausgesetzt, die Klasse wurde geladen), und dann beginnt das Programm mit der Verarbeitung dieser Instanzen Um die Initialisierung durchzuführen, lautet die Initialisierungssequenz: Führen Sie zuerst den Initialisierungsblock oder den bei der Deklaration des Attributs angegebenen Anfangswert aus und führen Sie dann den im Konstruktor angegebenen Anfangswert aus. Innerhalb einer Klasse bestimmt die Reihenfolge der Variablendefinitionen die Reihenfolge der Initialisierung. Auch wenn Variablen zwischen Methodendefinitionen verstreut sind, werden sie dennoch initialisiert, bevor eine Methode (einschließlich des Konstruktors) aufgerufen wird.


class Window {
  Window(int maker) {
    System.out.println("Window(" + maker + ")");
  }
}
class House {
  Window window1 = new Window(1);
  House() {
    System.out.println("House()");
    w3 = new Window(33);
  }
  Window window2 = new Window(2);
  void f() {
    System.out.println("f()");
  }
  Window w3 = new Window(3);
}
public class OrderOfInitialization {
  public static void main(String[] args) {
    House h = new House();
    h.f();
  }
}

Laufergebnisse:


Window(1)
Window(2)
Window(3)
House()
Window(33)
f()

Wie aus der Ausgabe ersichtlich ist, ist die Referenz w3 wird zweimal initialisiert: einmal vor dem Aufruf des Konstruktors und einmal während des Aufrufs (das erste referenzierte Objekt wird verworfen und durch Müll gesammelt).

2. Initialisierung statischer Daten
Unabhängig davon, wie viele Objekte erstellt werden, belegen statische Daten nur einen Speicherbereich. Das Schlüsselwort static kann nicht auf lokale Variablen angewendet werden, daher kann es nur auf Domänen angewendet werden.


class Bowl {
  Bowl(int maker) {
    System.out.println("Bowl(" + maker + ")");
  }
  void f1(int maker) {
    System.out.println("f1(" + maker + ")");
  }
}
class Table {
  static Bowl bowl1 = new Bowl(1);
  Table() {
    System.out.println("Table()");
    bowl2.f1(1);
  }
  void f2(int maker) {
    System.out.println("f2(" + maker + ")");
  }
  static Bowl bowl2 = new Bowl(2);
}

class Cupboard {
  Bowl bowl3 = new Bowl(3);
  static Bowl bowl4 = new Bowl(4);
  Cupboard() {
    System.out.println("CupBoard()");
    bowl4.f1(2);
  }
  void f3(int maker) {
    System.out.println("f3(" + maker + ")");
  }
  static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
  public static void main(String[] args) {
    System.out.println("created new Cupboard() in main");
    new Cupboard();
    System.out.println("created new Cupboard in main");
    new Cupboard();
    table.f2(1);
    cupboard.f3(1);
  }
  static Table table = new Table();
  static Cupboard cupboard = new Cupboard();
}

Laufendes Ergebnis:


Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
CupBoard()
f1(2)
created new Cupboard() in main
Bowl(3)
CupBoard()
f1(2)
created new Cupboard in main
Bowl(3)
CupBoard()
f1(2)
f2(1)
f3(1)

In gewissem Maße handelt es sich bei der Initialisierung um einen Code mit festem Zeitraum ausgeführt werden soll, kann es keine Parameter annehmen. Daher ist der vom Initialisierungsblock für alle Objekte derselben Klasse durchgeführte Initialisierungsprozess genau der gleiche. Aus diesem Grund ist es nicht schwierig, die grundlegende Verwendung des Initialisierungsblocks zu finden. Wenn es einen Teil des Initialisierungsverarbeitungscodes gibt, der für alle Objekte genau gleich ist und keine Parameter akzeptieren muss, ist dieser Teil des Initialisierungsverarbeitungscodes kann in den Initialisierungsblock extrahiert werden.

Das obige ist der detaillierte Inhalt vonBeispiel für die gemeinsame Nutzung der Konstruktorinitialisierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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