Was bedeutet static?

Status
Nicht offen für weitere Antworten.

bummerland

Top Contributor
Java ist eine konsequent objektorientierte Sprache, in der es weder globale Funktionen noch globale Variablen gibt. Da es aber mitunter sinnvoll ist, Eigenschaften zu verwenden, die nicht an Instanzen einer Klasse gebunden sind, haben die Sprachdesigner das Attribut static für Methoden und Variablen eingeführt. Eine Variable, die innerhalb einer Klasse mit dem Attribut static versehen wurde, nennt man Klassenvariable (oder auch Statische Variable). Im Gegensatz zu Instanzvariablen, die immer an ein konkretes Objekt gebunden sind, existieren Klassenvariablen unabhängig von einem Objekt.

Jede Klassenvariable wird nur einmal angelegt und kann von allen Methoden der Klasse aufgerufen werden. Da sich alle Methoden die Variable »teilen«, sind Veränderungen, die eine Instanz vornimmt, auch in allen anderen Instanzen sichtbar. Klassenvariablen sind daher vergleichbar mit globalen Variablen, denn ihre Lebensdauer erstreckt sich auf das gesamte Programm. Namenskollisionen können allerdings nicht auftreten, denn der Zugriff von außen erfolgt durch Qualifizierung mit dem Klassennamen in der Form Klassenname.Variablenname.

Variablen und Methoden mit dem Attribut static sind nicht an die Existenz eines konkreten Objekts gebunden, sondern existieren vom Laden der Klasse bis zum Beenden des Programms. Das static-Attribut beeinflußt bei Membervariablen ihre Lebensdauer und erlaubt bei Methoden den Aufruf, ohne daß der Aufrufer ein Objekt der Klasse besitzt, in der die Methode definiert wurde.

Wird das Attribut static nicht verwendet, so sind Variablen innerhalb einer Klasse immer an eine konkrete Instanz gebunden. Ihre Lebensdauer beginnt mit dem Anlegen des Objekts und dem Aufruf eines Konstruktors und endet mit der Freigabe des Objekts durch den Garbage Collector.

Quelle: Handbuch der Java-Programmierung: http://www.rz.fhtw-berlin.de/hjp3/k100054.html#sectlevel2id008003, http://www.rz.fhtw-berlin.de/hjp3/k100053.html#modifier


Static Blöcke bieten eine Möglichkeit, bestimmte Dinge gleich beim Laden einer Klasse auszuführen.
Das ist z. B. nützlich, wenn man ein ein statisches Array hat und gleich beim Ladender Klasse einige Felder inititalisieren will. Bsp.:

Code:
public static int[] arr = new int[10];
static
{
    arr[5] = 227;
    arr[7] = 238;
}
 
Status
Nicht offen für weitere Antworten.

Oben