1. Konstanten
Viele andere Programmiersprachen haben Konstanten , also Variablen, deren Werte nicht geändert werden können . Normalerweise werden sie für eine grundlegende Sache verwendet, beispielsweise für die Anzahl Pi
oder die Anzahl der Tage in den Monaten des Jahres. Allerdings kann ein Programmierer im Prinzip jede Variable in eine Konstante umwandeln, wenn er oder sie dies für notwendig hält.
Wie deklariert man also eine unveränderliche Variable (Konstante) in Java? Dafür gibt es ein spezielles Schlüsselwort: final
. Das Erstellen einer unveränderlichen Variablen sieht genauso aus wie das Erstellen einer gewöhnlichen Variable. Der einzige Unterschied besteht darin, dass Sie vor dem Typ der Variablen das Wort schreiben müssen final
, etwa so:
final Type name = value;
Wenn Sie versuchen, einer Variablen einen anderen Wert zuzuweisen final
, lässt sich Ihr Programm einfach nicht kompilieren.
Eine final
Variable muss bei der Deklaration initialisiert (ihr muss ein Wert zugewiesen werden) werden. Von dieser Regel gibt es eine Ausnahme: Sie können die Initialisierung einer statischen Klassenvariablen in einen Konstruktor verschieben. Aber das erfahren Sie in Level 10 .
Um die Anzahl der Schlüsselwörter zu reduzieren, verwenden Java-Entwickler das Wort final
nicht nur für die Deklaration von Konstanten. final
kann auch auf Methoden und sogar Klassen angewendet werden. Als deklarierte Methoden final
können nicht überschrieben werden und eine als deklarierte Klasse final
kann nicht vererbt werden.
Der final
Modifikator kann vor allen Variablen hinzugefügt werden: lokale Variablen, Methodenparameter, Klassenfelder und statische Klassenvariablen.
Beachten Sie, dass final
ein Variablenname lediglich Schutz vor Änderungen an dieser Variablen darstellt . Wenn eine Variable einen Verweis auf ein Objekt speichert, kann das Objekt trotzdem geändert werden.
Beispiel:
|
Wir erstellen ein Array. Dies ist nicht zulässig: Die data Variable ist als deklariert final . Aber Sie können dies tun. Und auch das. |
Globale Konstanten
Wenn Sie sich dazu entschließen, globale Konstanten in Ihrem Programm zu deklarieren, müssen Sie statische Klassenvariablen erstellen und sie public
zu einem machen final
. Für die Namen solcher Variablen gibt es einen besonderen Stil: Sie werden in Großbuchstaben geschrieben, wobei zur Trennung der Wörter ein Unterstrichzeichen verwendet wird.
Beispiele:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Variable Beschattung
Wie bereits erwähnt, können Sie in derselben Methode nicht mehrere lokale Variablen mit demselben Namen erstellen. Auf verschiedene Weise ist dies möglich.
Aber Folgendes wissen Sie wahrscheinlich nicht: Instanzvariablen und lokale Methodenvariablen können denselben Namen haben.
Beispiel:
Code | Variable Sichtbarkeit |
---|---|
|
|
In der add
Methode haben wir eine lokale Variable mit dem Namen deklariert sum
. Bis zum Ende der Methode wird die Instanzvariable beschattet (oder maskiert ) .sum
Okay, sagen Sie, das ist in gewisser Weise zu erwarten. Aber das ist noch nicht das Ende der Geschichte. Es stellt sich heraus, dass es immer noch eine Möglichkeit gibt, innerhalb der Methode auf die Instanzvariable zu verweisen, wenn eine Instanzvariable durch eine lokale Variable überschattet wird. Wir tun dies, indem wir das this
Schlüsselwort vor seinen Namen schreiben:
this.name
Hier ist ein Beispiel, bei dem der Namenskonflikt erfolgreich gelöst wurde:
Code | Variable Sichtbarkeit |
---|---|
|
|
Die Variablen count
und sum
sind überall mit oder ohne das Schlüsselwort verfügbar this
. In Zeilen, in denen die lokale Variable die Instanzvariable sum
überschattet , kann auf die Instanzvariable nur mit dem Schlüsselwort zugegriffen werden.sum
sum
this
Wenn eine statische Klassenvariable und nicht eine Instanzvariable geschattet wird, müssen Sie über den Klassennamen und nicht über das this
Schlüsselwort darauf zugreifen:
ClassName.name
Beispiel:
Code | Variable Sichtbarkeit |
---|---|
|
|
Sie können überall auf die count
und sum
statischen Variablen zugreifen, mit oder ohne Verwendung des Klassennamens Solution
als Präfix. In den Zeilen, in denen die lokale Variable die Instanzvariable sum
überschattet , ist der Zugriff auf die Instanzvariable nur bei Verwendung als Präfix möglich.sum
sum
Solution
3. Variablen innerhalb einer for
Schleife
Und noch eine kleine, aber interessante Tatsache.
Es gibt auch eine Stelle, an der eine Variable auf besondere Weise deklariert wird – innerhalb einer for
Schleife .
Sie erinnern sich vielleicht, dass eine for
Schleife normalerweise eine Zählervariable in Klammern hat. Und wie wird die Sichtbarkeit dieser Variable sein? Schließlich befindet es sich nicht im Hauptteil der Schleife. Ist es die ganze Methode? Oder nicht?
Die richtige Antwort lautet : Eine im Header einer for
Schleife deklarierte Variable ist nur im Schleifenkörper und im Schleifenheaderfor
sichtbar .
Beispiel:
Code | Variable Sichtbarkeit |
---|---|
|
|
Sie können also jederzeit Schleifen nacheinander in Ihren Code schreiben und Zählervariablen mit demselben Namen verwenden – das verursacht keine Probleme.
Beispiel:
Code | Variable Sichtbarkeit |
---|---|
|
|
GO TO FULL VERSION