• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Stała final i static

VPS Starter Arubacloud
+1 głos
1,714 wizyt
pytanie zadane 13 października 2016 w Java przez rubesom Obywatel (1,690 p.)
Cześć

 

Jaki jest sens określania polom/zmiennym jednocześnie static i final w javie? Rozumiem, że static sprawia iż pole obiektu ma taką samą wartość dla wszystkich obiektów danej klasy ale oznaczając to samo pole tylko jako final (bez static) sprawi, że to pole też będzie miało taką samą wartość.

Ma to jakiś głębszy sens?

2 odpowiedzi

+1 głos
odpowiedź 13 października 2016 przez zperkowski Stary wyjadacz (11,150 p.)
edycja 13 października 2016 przez zperkowski

Final sprawia, że pole jest tylko do odczytu. Inaczej mówiąc tworzy zmienną tylko do odczytu. Różni się tym od stałej, że nie trzeba jej definiować podczas deklaracji. Można określić jej wartość później, ale wtedy już zmienić jej się nie da. Static sprawia, że rezerwuje się tylko jeden obszar pamięci dla każdego z obiektów, zamiast tworzyć po jednej takiej samej stałej dla każdego obiektu. Połączenie dwóch tworzy stałą i efekt jest taki:

public static void main(String[] args) {
    final int stala;
    stala = 8;
    System.out.println(stala);
}

Powyższy kod się wykona.

public static void main(String[] args) {
    final static int stala;
    stala = 8;
    System.out.println(stala);
}

Drugi kod już zwróci błąd: Error:(2, 22) java: modifier static not allowed here

public class Main {
    final static int stala = 8;
    public static void main(String[] args) {
        System.out.println(stala);
    }
}

Trzeci kod też się wykona, jednak trzeba mieć na uwadze gdzie jest definicja stałej.

komentarz 13 października 2016 przez mbabane Szeryf (79,280 p.)

Slowo static w Javce jest troche niefortunnie dobrane i powoduje wedlug mnie pewne "napiecia" w poczatkowej fazie nauki.

komentarz 14 października 2016 przez rubesom Obywatel (1,690 p.)
edycja 14 października 2016 przez rubesom
Wydaje mi się, że rozumiem ale mam pytanie odnośnie określania wartości. Czemu trzeba deklarować wartość stałej od razu podczs deklaracji? Z czego to wynika?
komentarz 14 października 2016 przez mbabane Szeryf (79,280 p.)

Zmienna ze slowem final mozna tylko raz przypisac i nie musi byc to polaczone z deklaracja, ale robi sie tak czesto bo po prostu tak wynika z zalozen pisanego kodu, robimy stala zeby jej uzywac i zeby przypadkiem jej nie nadpisac.

Zmienna ze slowem static mozna zainicjowac albo od razu podczas deklaracji, albo w blokach statycznych albo w metodach statycznych - a co to sa bloki i metody statyczne to musisz sam doczytac. 

komentarz 14 października 2016 przez zperkowski Stary wyjadacz (11,150 p.)

Rozróżnijmy nazewnictwo stosowane w literaturze:

  • final static - stała - deklaracja z definicją
  • final - zmienna tylko do odczytu - definicja może nastąpić po deklaracji 

To są niuanse językowe, ale zapamiętanie ich pozwoliło mi na zrozumienie tego mechanizmu.

Stała charakteryzuje się tym samym co w C++. Jest zadeklarowana i koniec. Nie jest ona zmienną.

Zmienna tylko do odczytu zachowuje się trochę jak zmienna, bo można jej przypisać wartości. Jest tylko do odczytu, bo można tą wartość przypisać tylko raz.

komentarz 14 października 2016 przez rubesom Obywatel (1,690 p.)
Mam jeszcze pytanie dla czego stała musi być zadeklarowana po za metodą main?

Rozumiem, że to po to, żeby inne metody też miały do niej dostęp ale dla czego java nie pozwala na zdefiniowanie tej stałej w metodzie main?
komentarz 14 października 2016 przez mbabane Szeryf (79,280 p.)
edycja 14 października 2016 przez mbabane

dlatego ze bylo by to bez sensu, zmiennych ktore sa static mozna uzyc bez instancji klas, przyklad:

class A
{
       public static int ZM_STATYCZNA = 123;
       public int zwyklaZmienna = 321;
}


public class B
{
   public static void main(String args[])
   {
      System.out.println( "Zmienna statyczna: " + A.ZM_STATYCZNA ); 
        //kod sie wykona, 
        //zwroc uwage jak dostaje sie do zmiennej 
        //uzywam do tego faktycznej nazwy klasy - A.ZM_STATYCZNA


       //ponizsza linijka powoduje blad
       //System.out.println("Zwykla zmienna: " + A.zwyklaZmienna);

       //aby skorzystac ze zwyklej zmiennej po za klasa A 
       //trzeba stowrzyc obiekt klasy A
       A obj = new A();
       System.out.println( "Zwykla zmienna: " + obj.zwyklaZmienna ); 
         //zwroc uwage ze tutaj trzeba uzyc 
         //stworzonej zmiennej typu A obj
   }
}

Po za tym w duzych projektach metoda main sluzy tylko do odpalenia innych klas, ktore robia cala robote wiec, klasa w ktorej jest metoda main raczej nie bedzie zawierala kluczowych elementow projektu. 

0 głosów
odpowiedź 13 października 2016 przez letni_deszczyk Obywatel (1,700 p.)
Jak obiekt jest cięższy, a Ty chcesz użyć jedyne stałej z konkretnej klasy to jest bardzo uzasadnione utworzenie jej jako statyczną bo nie musisz tworzyć obiektu tylko po to aby jej użyć.

Podobne pytania

0 głosów
1 odpowiedź 199 wizyt
pytanie zadane 20 stycznia 2019 w Java przez ShockOfficial Początkujący (390 p.)
0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 26 kwietnia 2018 w C# przez Stami Gaduła (3,790 p.)
0 głosów
3 odpowiedzi 343 wizyt
pytanie zadane 3 maja 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...