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

Java Statyczne metody/pola

Object Storage Arubacloud
+2 głosów
5,141 wizyt
pytanie zadane 4 lutego 2017 w Java przez Wiciorny Ekspert (269,790 p.)

Witam serdecznie, długo już programuje czy to w C++/ czy Javie... kilka projektów mam. Niby spoko, ale pewien niesmak wiedzy mam związku z modyfikatorem STATIC.

Generalnie. Chodzi mi o  łopatologiczne wytłumaczenie. Co to znaczy, że metoda, zmienna statyczna jest związana bezpośrednio z klasą a nie instancją obiektu. Wiem, że statyczne są ładowane od razu przy odpalaniu JVM, a nie przy inicializaci.

Druga sprawa, czy metody statyczne mogą pracować na niestatycznych zmiennych? I tutaj znowu jaka jest różnica między metodą statyczną a zwykła?  Jak to się ma do konkretnego obiektu, czy np dodajac wartość do zmiennej statycznej w klasie, pozostale obiekty przy instancji beda mialy wartość zwiększoną? 

Dzieki za dyskusje, względne wypowiedzi- tylko jednak prosiłbym ludzi doświadczonych, a nie żeby nabijać posty kopiując wikipedie, ja tutaj chce skupić się na zrozumieniu niż na wałkowaniu samego SCHEMATU DEFINICJI.  

Pozdrawiam 

2 odpowiedzi

+4 głosów
odpowiedź 4 lutego 2017 przez Kornelia Kobiela Nałogowiec (33,340 p.)
wybrane 4 lutego 2017 przez Wiciorny
 
Najlepsza
Najbardziej łopatologicznie jest na przykładzie. Jeżeli tworzysz klasę, to zazwyczaj myślisz o niej jak o opakowaniu na obiekt. Pewnym szablonie, który pozwala nam tworzyć obiekty tego samego typu. Więc wyobraź sobie klasę Kot. Kot będzie miał imię i ulubione jedzenie. Jeżeli stworzysz obiekt klasy Kot, to każdy kotek ma swoje własne imię i ulubione jedzenie - to są zmienne przypisane do instancji. Ale jeśli chciałbyś policzyć ile kotów już masz stworzonych - wtedy potrzebujesz zmiennej statycznej, którą możesz modyfikować z poziomu każdej instancji i ona jest wspólna dla wszystkich.Tak samo metody statyczne, mogą być używane z klasą, a nie konkretnym obiektem danej klasy. Przynajmniej częściowo wytłumaczyłam ci to najlepiej jak umiem.
komentarz 4 lutego 2017 przez Wiciorny Ekspert (269,790 p.)
Serio, lepiej się nie dało. Taka prostota- a jednak działa. Dzięki serdeczne. Dobrze mi podpowiadała intuicja, ale  "chłopskie proste" życiowe zrozumienie jest najlepsze.
komentarz 4 lutego 2017 przez Wiciorny Ekspert (269,790 p.)

A jak to się ma do słowa FINAL, w takim razie?  Tego w c++ nie bardzo potrafie zlokalizować, tzn znaleźć odpowiednik w C++, dla FINAL w Javie. Stąd odkąd programuje w Javie mam z tym problem.  WIem, że nie może być modfyikowalna, to coś jak "dyrektywa const?" w C++ ? 

komentarz 4 lutego 2017 przez Adrian Spora Mądrala (5,100 p.)
edycja 4 lutego 2017 przez Adrian Spora

Zmienna z modyfikatorem final to stała. Tak, tak jak w przypadku const w C++. Nie wiem dlaczego została tak niefortunnie nazwana, jakby nie mogło zostać jak było w cpp. Kojarz to sobie tak: final - finalna - ostateczna - nie mogąca zmienić wartości - stała.

EDIT:

Jest kilka różnic pomiędzy modyfikatorem final w Javie i const w C++. Tutaj masz linka, gdzie jest to dobrze opisane:

Java final vs C++ const

+2 głosów
odpowiedź 4 lutego 2017 przez Adrian Spora Mądrala (5,100 p.)

Co to znaczy, że metoda, zmienna statyczna jest związana bezpośrednio z klasą a nie instancją obiektu

Znaczy to tyle, że zmienna statyczna jest jedna dla wszystkich obiektów danej klasy. Istnieje ona nawet przed powstaniem jakiegokolwiek obiektu tej klasy, dlatego jest zmienne statyczne są "ładowane" od razu przy starcie programu. 

W praktyce przejawia się to tym, że do zmiennej statycznej można uzyskać dostęp nie tylko odnosząc się do niej przez instancję konkretnego obiektu, ale także przez nazwę klasy - nawet jeśli żaden obiekt jeszcze nie istnieje.

Jakakolwiek zmiana wartości zmiennej statycznej powoduje jej zmianę dla każdego obiektu danej klasy, dlatego zmiennych statycznych nie należy nadużywać, bo prowadzi to do błędów, np. Załóżmy że mamy klasę Person mającą statyczne pole age. Mając kilka obiektów takiej klasy i zmieniając wiek jednej osobie - zmieniamy go również pozostałym, bo dla każdego obiektu jest to ta sama zmienna.

A więc to, że zmienna statyczna jest związana bezpośrednio z klasą a nie instancją obiektu, oznacza tyle, że taka zmienna jest tworzona jedna, dla klasy, a nie osobna dla poszczególnych obiektów. Innymi słowy można powiedzieć, że zmienna statyczna klasy jest wspólna dla wszystkich obiektów tej klasy.

Podobnie z metodami statycznymi. Są one wspólne dla wszystkich obiektów danej klasy. Wiąże się to z tym, że nie mogą odnosić się do niestatycznych zmiennych. Tzn. statyczne metody mogą odwoływać się tylko do statycznych zmiennych danej klasy lub oczywiście innych klas. Jest to logiczne, ponieważ gdyby statyczna metoda mogła się odwoływać do niestatycznych zmiennych to nie mogłaby być wspólna dla wszystkich obiektów, bo odwoływałaby się do zmiennych, które są unikalne dla każdego obiektu.

Statyczna metoda nie może też wywoływać niestatycznych metod, bo one mogą z kolei używać niestatycznych zmiennych.

Podobne pytania

0 głosów
1 odpowiedź 236 wizyt
pytanie zadane 2 marca 2017 w Java przez Kloda Użytkownik (760 p.)
0 głosów
1 odpowiedź 1,367 wizyt
pytanie zadane 5 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 5 lutego 2017 w Java przez niezalogowany

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...