java "void" und "nicht nichtig" - Konstruktor
Schrieb ich dieser einfachen Klasse in java nur für Testzwecke einige seiner Funktionen.
public class class1 {
public static Integer value=0;
public class1() {
da();
}
public int da() {
class1.value=class1.value+1;
return 5;
}
public static void main(String[] args) {
class1 h = new class1();
class1 h2 = new class1();
System.out.println(class1.value);
}
}
Ausgabe:
2
Aber in diesem code:
public class class1 {
public static Integer value=0;
public void class1() {
da();
}
public int da() {
class1.value=class1.value+1;
return 5;
}
public static void main(String[] args) {
class1 h = new class1();
class1 h2 = new class1();
System.out.println(class1.value);
}
}
Die Ausgabe dieses Codes ist:
0
Warum nicht, wenn ich void
in der Konstruktor-Deklaration, das statische Feld der Klasse ändert sich nicht mehr?
- Das zweite ist kein Konstruktor. Es ist nur eine Methode, das passiert Freigabe einen Namen mit seiner Klasse.
- Denn es ist nicht mehr ein Konstruktor.
- die Antwort auf diese ähnliche Frage Warum Konstruktoren in java nicht haben einen Rückgabetyp gibt einen guten Grund.
- seine erstaunlich, dass Sie schrieb, Sie Antwort, kurz bevor ich die Seite aktualisieren kann ; tnx alle,
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Java der Konstruktor ist nicht eine Methode. Es hat nur den Namen der Klasse und einer spezifischen Sichtbarkeit. Wenn er erklärt, dass etwas zurückgibt, dann es ist kein Konstruktor, nicht einmal, wenn er erklärt, dass gibt eine
void
. Beachten Sie hier den Unterschied:Auch, wenn eine Klasse nicht definieren Sie einen Konstruktor, dann wird der compiler automatisch ein Standardkonstruktor für Sie.
public void Klasse1() ist kein Konstruktor, es ist eine void-Methode, deren Namen geschieht, entsprechen den Namen der Klasse. Es wird nie aufgerufen. Statt java erstellt einen default-Konstruktor (da Sie nicht eine erstellt haben), die tut nichts.
Verwendung von void im Konstruktor von definition führt es nicht mehr werden, der Konstruktor.
Der Konstruktor hat insbesondere keinen return-Typ. Während void gibt keinen Wert zurück, im wahrsten Sinne des Wortes, es wird immer noch als eine Rückkehr geben.
Im zweiten Beispiel (wo Sie mit the void), die Sie zu tun haben
h.class1()
für die Methode genannt, weil es nicht mehr den Konstruktor. Oder Sie können einfach entfernen Sie die leere.Dies ist wohl ein Designfehler in Java.
Vollkommen legal. Sollte wohl nicht sein, aber ist.
In deinem Beispiel, class1() wird nie aufgerufen, weil es nicht ein Konstruktor. Stattdessen wird der default-Konstruktor wird immer aufgerufen.
Vorschlag: machen Sie sich vertraut mit Java-Namenskonventionen. Klassennamen beginnen mit Großbuchstaben.
MyClass x = new MyClass(); x.MyClass();
Vollkommen gültig.