Von Siehe Java Static Variable Methoden :
- Es ist eine Variable, die zur Klasse und nicht zum Objekt (Instanz) gehört.
- Statische Variablen werden zu Beginn der Ausführung nur einmal initialisiert. Diese Variablen werden zuerst initialisiert, bevor Instanzvariablen initialisiert werden
- Eine einzelne Kopie, die von allen Instanzen der Klasse gemeinsam genutzt werden soll
- Auf eine statische Variable kann direkt über den Klassennamen zugegriffen werden und benötigt kein Objekt.
Instanz- und Klassenvariablen (statisch) werden automatisch auf Standardstandardwerte initialisiert, wenn Sie sie nicht absichtlich initialisieren. Obwohl lokale Variablen nicht automatisch initialisiert werden, können Sie kein Programm kompilieren, das weder eine lokale Variable initialisiert noch dieser lokalen Variablen einen Wert zuweist, bevor sie verwendet wird.
Was der Compiler tatsächlich tut, ist, intern eine einzelne Klasseninitialisierungsroutine zu erstellen, die alle statischen Variableninitialisierer und alle statischen Initialisierungscodeblöcke in der Reihenfolge kombiniert, in der sie in der Klassendeklaration erscheinen. Diese einzelne Initialisierungsprozedur wird nur einmal automatisch ausgeführt, wenn die Klasse zum ersten Mal geladen wird.
Bei inneren Klassen können sie keine statischen Felder haben
Eine innere Klasse ist eine verschachtelte Klasse, die nicht explizit oder implizit deklariert ist static.
...
Innere Klassen dürfen keine statischen Initialisierer (§8.7) oder Mitgliedsschnittstellen deklarieren ...
Innere Klassen dürfen keine statischen Elemente deklarieren, es sei denn, sie sind konstante Variablen ...
Siehe JLS 8.1.3 Innere Klassen und umschließende Instanzen
finalFelder in Java können getrennt von ihrem Deklarationsort initialisiert werden. Dies gilt jedoch nicht für static finalFelder. Siehe das folgende Beispiel.
final class Demo
{
private final int x;
private static final int z; //must be initialized here.
static
{
z = 10; //It can be initialized here.
}
public Demo(int x)
{
this.x=x; //This is possible.
//z=15; compiler-error - can not assign a value to a final variable z
}
}
Dies ist , weil es nur eine ist Kopie der staticVariablen , die mit der Art, anstatt eines mit jeder Instanz des Typs zugeordnet ist, wie mit Instanzvariablen und wenn wir versuchen , initialisieren zvom Typ static finalinnerhalb des Konstruktor, es wird versuchen , das neu zu initialisieren static finalTyp - Feld zweil der Konstruktor bei jeder Instanziierung der Klasse ausgeführt wird, die bei statischen finalFeldern nicht auftreten darf .