Konstanten
„Amigo, wusstest du, dass in Java nicht alle Variablen geändert werden können?“
„Wie ist das, Kim? Tatsächlich spricht schon das Wort ‚Variable‘ von Veränderung.“
„Daran besteht kein Zweifel. Wie viele andere Programmiersprachen gibt es in Java Konstanten , also Variablen, deren Werte nicht geändert werden können . Und das Wort ‚Konstante‘ spricht schon von Konstanz.“
„Und wofür sind sie?“
„Normalerweise werden sie für eine grundlegende Sache verwendet, beispielsweise für die Anzahl Pi
oder die Anzahl der Tage in den Monaten eines Jahres. Allerdings kann ein Programmierer im Prinzip jede Variable zu einer Konstante machen, wenn er oder sie sich dazu entschließt.“ so ist es notwendig.“
„Du meinst etwa einen Namen, die Farbe eines Autos oder den Namen eines Wochentags?“
„Sie haben die richtige Idee. Alles, was nicht geändert werden sollte.“
„Und wie sehen diese Konstanten in Java aus?“
„Java hat ein spezielles Schlüsselwort für sie: 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;
„Was passiert, wenn Sie eine Konstante erstellen und dann versuchen, ihr einen anderen Wert zuzuweisen?“
„Das ist die richtige Frage! Und die richtige Antwort lautet: Wenn Sie versuchen, einer final
Variablen einen anderen Wert zuzuweisen, lässt sich Ihr Programm einfach nicht kompilieren.“
„Was ist, wenn Sie eine final
Variable deklarieren, ihr aber keinen Wert zuweisen?“
„Das macht keinen Sinn, deshalb ist es in Java auch nicht erlaubt. Eine final
Variable muss initialisiert werden, wenn sie deklariert wird, das heißt, Sie müssen ihr einen Wert zuweisen. Es gibt eine Ausnahme von dieser Regel: Sie können die Initialisierung von verschieben eine statische Klassenvariable in einen Konstruktor. Aber das erfahren Sie später.
„Allerdings ist nicht alles, was ist, final
eine Konstante. Um die Anzahl der Schlüsselwörter zu reduzieren, verwenden Java-Entwickler das Wort final
nicht nur für die Deklaration von Konstanten. final
Es kann auch auf Methoden und sogar Klassen angewendet werden. Deklarierte Methoden final
können nicht überschrieben werden, und eine Klasse. “ als final
nicht vererbbar deklariert.“
„Äh... Überschrieben? Vererbt? Welche Sprache sprichst du jetzt?“
„Die Sprache der objektorientierten Programmierung. Sie werden sich sehr bald damit befassen. Bis dahin genießen Sie einfach die schöne Terminologie.“
„Okay. Kann also final
vor Variablen, Klassen und Methoden stehen, und dieses Schlüsselwort macht sie in gewissem Sinne unveränderlich?“
"Ja. Darüber hinaus final
kann der Modifikator vor allen Variablen hinzugefügt werden: lokale Variablen, Methodenparameter, Klassenfelder und statische Klassenvariablen.
„Hier ist es wichtig, sich daran zu erinnern: final
Bevor ein Variablenname nur ein Schutz vor Änderungen an dieser Variablen ist . Wenn eine Variable einen Verweis auf ein Objekt speichert, kann das Objekt trotzdem geändert werden.“
„Ich verstehe es nicht ganz.“
„Sie werden es sehr bald verstehen. Hier ein 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. |
„Verstanden. Das ist schwierig.“
Globale Konstanten
„Was sind Ihrer Meinung nach globale Konstanten?“
„Ich vermute, globale Konstanten sind wahrscheinlich wie globale Variablen, nur Konstanten?“
„Genau. Wenn Sie in Ihrem Programm globale Konstanten deklarieren müssen, erstellen Sie statische Klassenvariablen und machen Sie sie public
und final
. Es gibt einen besonderen Stil für die Namen solcher Variablen: Sie werden in Großbuchstaben geschrieben, üblicherweise mit einem Unterstrich getrennte Wörter.
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;
}
Variable Beschattung
„Wie ich bereits sagte, können Sie in einer einzigen Methode nicht mehrere lokale Variablen mit demselben Namen erstellen. In verschiedenen Methoden ist dies möglich.“
"Ich weiß, dass!"
„Aber was Sie wahrscheinlich nicht wissen, ist, dass Variablen in einer Klasse und lokale Variablen in einer Methode durchaus denselben Namen haben können.
Beispiel:
Code | Variable Sichtbarkeit |
---|---|
|
|
„In der add
Methode haben wir eine lokale Variable mit dem Namen deklariert sum
. Bis zum Ende der Methode verdeckt (oder maskiert ) sie die sum
Instanzvariable.“
„Hmm... ich würde sagen, in gewisser Weise ist das das erwartete Verhalten.“
„Aber das ist noch nicht das Ende der Geschichte. Es stellt sich heraus, dass es, wenn eine Instanzvariable durch eine lokale Variable überschattet wird, immer noch eine Möglichkeit gibt, innerhalb der Methode auf die Instanzvariable zu verweisen. Wir tun dies, indem wir das Schlüsselwort vor ihren Namen schreiben. this
“ :
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
„Natürlich muss ich das üben.“
„Du wirst es schaffen.“
„Was ist, wenn eine statische Klassenvariable geschattet wird und nicht nur eine (nicht statische) Instanzvariable? Sie können nicht über darauf zugreifen this
?“
„Sie haben Recht. Das Schlüsselwort this funktioniert nicht. Sie müssen über den Klassennamen darauf verweisen:
ClassName.name
Beispiel:
Code | Variable Sichtbarkeit |
---|---|
|
|
„Achtung: Sie können auf die statischen Variablen count
und sum
überall mit oder ohne Verwendung des Klassennamens Solution
als Präfix zugreifen. In den Zeilen, in denen die sum
lokale Variable die sum
Instanzvariable überschattet, ist der Zugriff auf die sum
Klassenvariable nur möglich, wenn sie Solution
als Präfix verwendet wird.
Variablen innerhalb einer for
Schleife
„Und noch eine kleine, aber interessante Tatsache. Es gibt auch einen Ort, an dem eine Variable auf besondere Weise deklariert wird – ich spreche von innerhalb einer for
Schleife .“ Normalerweise for
enthält eine Schleife eine counter
Variable in Klammern. 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?"
„Davon habe ich schon etwas gehört. Soweit ich weiß, ist eine im Schleifenkopf deklarierte Variable nur for
im Schleifenkörper und im Schleifenkopffor
sichtbar .“
„Gut gemacht, Amigo. Schauen Sie sich dennoch ein Beispiel an, um dieses Material zu untermauern:
Code | Variable Sichtbarkeit |
---|---|
|
|
„Sie sagen also, dass ich in meinem Code mehrere Schleifen nacheinander mit einer gleichnamigen Zählervariablen schreiben könnte und es keine Probleme geben würde?“
„Es würde keine Probleme geben. Schauen Sie hier:
Code | Variable Sichtbarkeit |
---|---|
|
|
GO TO FULL VERSION