13 Stimmen

Konstruktor ist statisch oder nicht statisch

Gemäß Standardbuch ist der Konstruktor eine spezielle Art von Funktion, die verwendet wird, um Objekte zu initialisieren. Da der Konstruktor als Funktion definiert ist und innerhalb einer Klasse eine Funktion nur zwei Typen haben kann - entweder statisch oder nicht statisch -, frage ich mich, was ein Konstruktor ist?

1.)Da der Konstruktor ohne Objekt aufgerufen wird, muss er statisch sein

  Test test = new Test();//Test() wird ohne Objekt aufgerufen
   also muss statisch sein

Ich frage mich, wenn der Konstruktor eine statische Methode ist, wie können wir das dann häufig innerhalb des Konstruktors verwenden?

Test(){
    System.out.println(this);
}

Bedeutet die Ausgabe Test@12aw212, dass Konstruktoren nicht statisch sind?

14voto

Tomasz Nurkiewicz Punkte 322861

Ihr zweites Beispiel trifft den Nagel auf den Kopf. dies Referenz ist im Konstruktor verfügbar, was bedeutet, dass der Konstruktor gegen ein Objekt ausgeführt wird - dasjenige, das gerade erstellt wird.

Im Prinzip, wenn Sie ein neues Objekt erstellen (indem Sie den new-Operator verwenden), wird JVM etwas Speicher dafür zuweisen und dann einen Konstruktor für dieses neu erstellte Objekt aufrufen. Die JVM stellt auch sicher, dass kein anderer Methode aufgerufen wird, bevor der Konstruktor aufgerufen wird (das ist es, was ihn besonders macht).

Tatsächlich ist der Konstruktor auf Maschinenebene eine Funktion mit einem speziellen, impliziten this Parameter. Dieser spezielle Parameter (vom Laufzeit übergeben) macht den Unterschied zwischen Objekt- und statischen Methoden aus. Mit anderen Worten:

foo.bar(42);

wird übersetzt zu:

bar(foo, 42);

wobei der erste Parameter this genannt wird. Andererseits werden static Methoden direkt aufgerufen:

Foo.bar(42);

wird übersetzt zu:

bar(42);

Foo hier ist nur ein Namensraum, der nur im Quellcode existiert.

0voto

kosa Punkte 65422

Konstruktoren sind nicht statisch. Der erste Parameter jeder Methode ist implizit this (außer bei statischen Methoden) und der Konstruktor ist einer von ihnen.

0voto

Sidharth Mudgal Punkte 4206

Konstruktoren sind NICHT statische Funktionen. Wenn du Test test =new Test(); machst, wird ein neues Test-Objekt erstellt und dann der Konstruktor auf diesem Objekt aufgerufen (ich meine this zeigt auf das neu erstellte Objekt).

0voto

mfsiega Punkte 2822

Das new Schlüsselwort hier ist der Trick. Sie haben Recht, wenn Sie bemerken, dass im Allgemeinen, wenn Sie es ohne ein Objekt aufrufen, eine Methode statisch ist. In diesem speziellen Fall (d.h. vorangestellt durch das Schlüsselwort new) weiß der Compiler, den Konstruktor aufzurufen.

0voto

Raimund Grün Punkte 1

Der Operator new gibt eine Referenz auf das erstellte Objekt zurück.

new Test(); // erstellt eine Instanz.

Das System.out.println(this); wird nach der Instanziierung des Objekts durch den new Operator aufgerufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X