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
final
Felder in Java können getrennt von ihrem Deklarationsort initialisiert werden. Dies gilt jedoch nicht für static final
Felder. 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 static
Variablen , die mit der Art, anstatt eines mit jeder Instanz des Typs zugeordnet ist, wie mit Instanzvariablen und wenn wir versuchen , initialisieren z
vom Typ static final
innerhalb des Konstruktor, es wird versuchen , das neu zu initialisieren static final
Typ - Feld z
weil der Konstruktor bei jeder Instanziierung der Klasse ausgeführt wird, die bei statischen final
Feldern nicht auftreten darf .