1. Stałe
Wiele języków programowania posiada stałe – zmienne, których wartości nie można zmienić . Zwykle są to pewne podstawowe rzeczy, takie jak liczba Pi
lub liczba dni w miesiącach. Chociaż w zasadzie programista może uczynić dowolną zmienną stałą, jeśli uzna, że jest to konieczne.
Jak więc zadeklarować niezmienną zmienną (stałą) w Javie? Jest do tego specjalne słowo kluczowe - final
. Tworzenie niezmiennej zmiennej wygląda tak samo, jak tworzenie zwykłej, tylko trzeba napisać słowo przed typem zmiennej final
:
final тип Nazwa = oznaczający;
Jeśli spróbujesz nadać final
-zmiennej inną wartość, twój program po prostu się nie skompiluje.
final
- zmienna musi być zainicjowana podczas deklarowania (przypisywania jej wartości). Ta reguła ma jeden wyjątek: możesz przenieść inicjalizację zmiennej klasy do konstruktora. Ale o tym dowiesz się na poziomie 10 .
Aby zmniejszyć liczbę słów kluczowych, programiści Javy używają tego słowa final
nie tylko do deklarowania stałych. final
można również określić przed metodą, a nawet klasą. Metody zadeklarowane jako final
nie mogą zostać przesłonięte, a klasa zadeklarowana jako final
nie może być dziedziczona.
Modyfikator final
można dodać przed dowolnymi zmiennymi: lokalnymi, parametrami, polami klas i zmiennymi statycznymi.
Należy pamiętać, że final
- jest to tylko zabezpieczenie przed zmianą zmiennej . Jeśli zmienna zawiera odniesienie do obiektu, obiekt nadal można zmienić.
Przykład:
|
Tworzymy tablicę. Nie jest to możliwe: zmienna data jest zadeklarowana jako final . Czy to dozwolone. I tak jest to możliwe. |
Stałe globalne
Jeśli zdecydujesz się zadeklarować stałe globalne w swoim programie, aby to zrobić, musisz utworzyć statyczne zmienne klasy , a także uczynić je public
i final
. Istnieje specjalny styl pisania nazw takich zmiennych: są one pisane wielkimi literami, a znak podkreślenia działa jak separator słów.
Przykłady:
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. Przesłanianie zmiennych
Jak powiedzieliśmy wcześniej, nie można utworzyć kilku zmiennych lokalnych o tej samej nazwie w jednej metodzie. W różnych metodach - jest to możliwe.
Ale oto, czego prawdopodobnie nie wiesz: zmienne klasy i zmienne metody lokalnej mogą mieć tę samą nazwę.
Przykład:
Kod | Dostępność zmiennych |
---|---|
|
|
W metodzie add
zadeklarowaliśmy zmienną lokalną sum
i do końca metody nakłada się ona (lub mówią, że zaciemnia ) na zmienną klasową sum
.
No ok, mówisz, nawet w pewnym sensie oczekiwane zachowanie. Ale to nie wszystko. Okazuje się, że jeśli zmienna klasy jest przesłonięta przez zmienną lokalną, nadal istnieje sposób, aby metoda odwoływała się do zmiennej klasy. Aby to zrobić, musisz napisać słowo kluczowe przed jej imieniem this
:
this.Nazwa
Oto przykład pomyślnego rozwiązania konfliktu nazw:
Kod | Dostępność zmiennych |
---|---|
|
|
Zmienne wszędzie count
i są dostępne zarówno ze sum
słowem kluczowym this
, jak i bez niego . W wierszach, w których zmienna lokalna sum
przesłania zmienną klasową sum
, dostęp do zmiennej klasowej sum
można uzyskać tylko za pomocą this
.
Jeśli cieniowana jest nie tylko zmienna klasy, ale zmienna klasy statycznej, musisz uzyskać do niej dostęp nie przez this
, ale przez nazwę klasy:
ClassName.Nazwa
Przykład:
Kod | Dostępność zmiennych |
---|---|
|
|
Zmienne są wszędzie statyczne count
i są dostępne z sum
prefiksem nazwy klasy Solution
lub bez niego . W wierszach, w których zmienna lokalna sum
przesłania zmienną klasową sum
, dostęp do zmiennej klasowej sum
można uzyskać tylko za pomocą przedrostka Solution
.
3. Zmienne wewnątrz pętlifor
I jeszcze jeden mały, ale interesujący fakt.
Jest jeszcze jedno miejsce, w którym zmienna jest deklarowana w specjalny sposób - jest to pętlafor
.
Jak pamiętasz, zazwyczaj pętla for
ma zmienną licznika zadeklarowaną w nawiasach. A jaka będzie widoczność tej zmiennej? Nie ma go w ciele pętli, więc to cała metoda? A może nadal nie jest?
Prawidłowa odpowiedź brzmi: zmienna zadeklarowana w nagłówku pętlifor
jest widoczna tylko w ciele pętli iw nagłówku pętlifor
.
Przykład:
Kod | Dostępność zmiennych |
---|---|
|
|
Dlatego zawsze możesz napisać sekwencyjnie kilka pętli w swoim kodzie ze zmienną licznika o tej samej nazwie - nie będzie problemów.
Przykład:
Kod | Dostępność zmiennych |
---|---|
|
|