Der Vollständigkeit zu initialisieren, nicht prettiness werden folgende Arbeiten:
public class Arrays {
int []arr2=new int[2];
// this is a field definition
{ // and this is a dynamic initializer,
// it runs after the constructor's
// first line
arr2[0]=20;
arr2[1]=30;
}
}
Aber natürlich ist es besser, Praxis das Array zu initialisieren, wie in den anderen Antworten gezeigt .
Und die Frage zu beantworten:
auf Klassenebene, sind die folgenden nur erlaubt:
- Constructor Definitionen
- Methode Definitionen
- Inner Klassendefinitionen (einschließlich Schnittstellen und enums)
- Felddefinitionen
- Initializer Blöcke (statisch oder dynamisch/instance)
Aussagen nicht erlaubt sind, müssen sie in einem der oben verschachtelt werden.
In Bezug auf Adriaan Koster Kommentar:
Sie werden Instanzeninitialisierung Blöcke genannt. Das Gegenteil von 'statisch' ist 'Instanz' in OO, nicht 'dynamisch'.
Wahr, Beispiel ist der bessere OO-Ausdruck. Aber sprachlich ist Dynamik das Gegenteil von Statik, also bleibe ich dynamisch.
Instanzinitialisierungsblöcke werden vom Compiler in jeden Konstruktor kopiert und VOR dem Konstruktorcode ausgeführt, nicht danach.
Tatsächlich werden sie in den Konstruktor nach der ersten Zeile (die implizit oder explizit oder this()
super()
call) kopiert. Also technisch sind wir entweder beide richtig oder beide falsch (der Initialisierer läuft NACH der ersten Zeile und VOR dem Rest).
Zur Klarstellung (in Bezug auf die erste Zeile):
- Jede Klasse hat mindestens einen Konstruktor. Wenn Sie keinen hinzufügen, fügt der Compiler einen öffentlichen Konstruktor ohne Argumente hinzu.
- Jeder Konstruktor beginnt mit einem Aufruf eines anderen Konstruktors derselben Klasse
this(args)
oder eines Konstruktors der Superklasse (super(args)
). Wenn Sie keine dieser Zeilen schreiben, fügt der Compiler einen Aufruf super()
ohne Parameter ein. Jeder Konstruktor hat also mindestens eine Anweisung. Initialisierungen werden nach dieser ersten Anweisung ausgeführt.
Referenz:
Ich kenne den Weg, aber die Sache ist, kann ich dies auf Instanz Ebene –