Wpis z mikrobloga

Pytanie: Dlaczego zmienna finalna jest często również statyczna?

Rozumiem, że zmienna oznaczona jako static final jest niemodyfikowalna po pierwszej inicjalizacji, która musi nastąpić podczas definicji zmiennej lub w konstruktorze klasy tak?
Zmienne oznacza się jako static final po to, żeby każdy obiekt danej klasy, w której jest zadeklarowana taka zmienna współdzielił jedną zmienną, która jest niemodyfikowalna? (bo gdyby była oznaczona jako final to każdy obiekt będący instancją klasy miałby swoją "wersję" tej zmiennej)

Coś jeszcze może być odpowiedzią na takie pytanie?

#java
  • 6
@youlife007: W ten sposób się po prostu definiuje stałe, bardziej lub mniej globalne (w zależności czy są public czy nie).

Np. jak byś pisał klasę Math i chciał w niej umieścić liczbę pi żeby inny kod mógł się łatwo do niej dostać, to zapewne zdefiniował byś w niej public static final PI = 3.14..........; i miał byś wtedy po prostu stałą, do której możesz się łatwo odwołać (Math.PI)
Rozumiem, że zmienna oznaczona jako static final jest niemodyfikowalna po pierwszej inicjalizacji, która musi nastąpić podczas definicji zmiennej lub w konstruktorze klasy tak?


@youlife007: finalne statyczne pole inicjalizowane w konstruktorze?

@Myzreal: Hehs, też mu pisałem przykład na bazie PI
Coś jeszcze może być odpowiedzią na takie pytanie?


@youlife007: Można jeszcze dodać, że pozwala to na dodatkową optymalizację podczas kompilacji w przypadku, gdy masz stałą statyczną w postaci literału np liczbowego. W takim przypadku, podczas kompilacji użycie stałej jest podmieniane na ten właśnie literał.