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 Pioder 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 finalVariable 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 finalnicht nur für die Deklaration von Konstanten. finalkann auch auf Methoden und sogar Klassen angewendet werden. Als deklarierte Methoden finalkönnen nicht überschrieben werden und eine als deklarierte Klasse finalkann nicht vererbt werden.
Der finalModifikator kann vor allen Variablen hinzugefügt werden: lokale Variablen, Methodenparameter, Klassenfelder und statische Klassenvariablen.
Beachten Sie, dass finalein 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 dataVariable 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 publiczu 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 addMethode 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 thisSchlü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.sumsumthis
Wenn eine statische Klassenvariable und nicht eine Instanzvariable geschattet wird, müssen Sie über den Klassennamen und nicht über das thisSchlü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 Solutionals 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.sumsumSolution
3. Variablen innerhalb einer forSchleife
Und noch eine kleine, aber interessante Tatsache.
Es gibt auch eine Stelle, an der eine Variable auf besondere Weise deklariert wird – innerhalb einer forSchleife .
Sie erinnern sich vielleicht, dass eine forSchleife 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 forSchleife 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