Java Language
Verwenden Sie das statische Schlüsselwort
Suche…
Syntax
- public static int myVariable; // Eine statische Variable deklarieren
- public static myMethod () {} // Eine statische Methode deklarieren
- public static final double MY_CONSTANT; // Deklarieren einer konstanten Variablen, die von allen Instanzen der Klasse gemeinsam genutzt wird
- öffentliches Finale Doppel MY_CONSTANT; // Deklarieren einer für diese Instanz der Klasse spezifischen Konstantenvariablen (am besten in einem Konstruktor verwendet, der für jede Instanz eine andere Konstante generiert)
Statik verwenden, um Konstanten zu deklarieren
Da das static
Schlüsselwort für den Zugriff auf Felder und Methoden ohne instanziierte Klasse verwendet wird, kann es zum Deklarieren von Konstanten für die Verwendung in anderen Klassen verwendet werden. Diese Variablen bleiben für jede Instanziierung der Klasse konstant. Konventionell sind static
Variablen immer ALL_CAPS
und verwenden Unterstriche anstelle von Kamel. Ex:
static E STATIC_VARIABLE_NAME
Da sich Konstanten nicht ändern können, kann static
auch mit dem final
Modifikator verwendet werden:
Um zum Beispiel die mathematische Konstante von pi zu definieren:
public class MathUtilities {
static final double PI = 3.14159265358
}
Welche kann in jeder Klasse als Konstante verwendet werden, zum Beispiel:
public class MathCalculations {
//Calculates the circumference of a circle
public double calculateCircumference(double radius) {
return (2 * radius * MathUtilities.PI);
}
}
Verwenden Sie statisch mit diesem
Static gibt einen Methoden- oder Variablenspeicher an, der nicht für jede Instanz der Klasse zugeordnet ist. Die statische Variable wird vielmehr von allen Klassenmitgliedern gemeinsam genutzt. Der Versuch, die statische Variable wie ein Member der Klasseninstanz zu behandeln, führt zu einer Warnung:
public class Apple {
public static int test;
public int test2;
}
Apple a = new Apple();
a.test = 1; // Warning
Apple.test = 1; // OK
Apple.test2 = 1; // Illegal: test2 is not static
a.test2 = 1; // OK
Statisch deklarierte Methoden verhalten sich auf die gleiche Weise, jedoch mit einer zusätzlichen Einschränkung:
Sie können
this
Schlüsselwort nicht in ihnen verwenden!
public class Pineapple {
private static int numberOfSpikes;
private int age;
public static getNumberOfSpikes() {
return this.numberOfSpikes; // This doesn't compile
}
public static getNumberOfSpikes() {
return numberOfSpikes; // This compiles
}
}
Im Allgemeinen empfiehlt es sich, generische Methoden zu deklarieren, die für verschiedene Instanzen einer Klasse (z. B. Klonmethoden) static
, während Methoden wie equals()
als nicht statisch gelten. Die main
eines Java-Programms ist immer statisch. this
bedeutet, dass das Schlüsselwort this
nicht in main()
.
Verweis auf nicht statisches Member aus statischem Kontext
Statische Variablen und Methoden sind nicht Teil einer Instanz. Es gibt immer eine einzige Kopie dieser Variablen, unabhängig davon, wie viele Objekte Sie von einer bestimmten Klasse erstellen.
Beispielsweise möchten Sie möglicherweise eine unveränderliche Liste von Konstanten haben. Es ist ratsam, sie statisch zu halten und nur einmal in einer statischen Methode zu initialisieren. Dies würde zu einer erheblichen Leistungssteigerung führen, wenn Sie regelmäßig mehrere Instanzen einer bestimmten Klasse erstellen.
Außerdem können Sie auch einen statischen Block in einer Klasse haben. Sie können es verwenden, um einer statischen Variablen einen Standardwert zuzuweisen. Sie werden nur einmal ausgeführt, wenn die Klasse in den Speicher geladen wird.
Instanzvariable, wie der Name vermuten lässt, hängt von einer Instanz eines bestimmten Objekts ab, sie lebt, um ihren Launen zu dienen. Sie können während eines bestimmten Lebenszyklus eines Objekts mit ihnen herumspielen.
Alle Felder und Methoden einer Klasse, die in einer statischen Methode dieser Klasse verwendet werden, müssen statisch oder lokal sein. Wenn Sie versuchen, instabile (nicht statische) Variablen oder Methoden zu verwenden, wird Ihr Code nicht kompiliert.
public class Week {
static int daysOfTheWeek = 7; // static variable
int dayOfTheWeek; // instance variable
public static int getDaysLeftInWeek(){
return Week.daysOfTheWeek-dayOfTheWeek; // this will cause errors
}
public int getDaysLeftInWeek(){
return Week.daysOfTheWeek-dayOfTheWeek; // this is valid
}
public static int getDaysLeftInTheWeek(int today){
return Week.daysOfTheWeek-today; // this is valid
}
}