funkcje statyczne, a nieestatyczne

0

Cześć :)
Czym różnią się zmienne/funkcje/klasy statyczne w JAVIE od zwykłych atrybutów/metod/klas? W sensie, czym różnią się dla Wirtualnej maszyny i w bytekodzie?

1

Zmienna statyczna jest w jednym egzemplarzu dla danej klasy. Zmienna instancji jest dla każdego obiektu osobno.
Metoda instancji wymaga podania thisa. This jest przekazywany implicite przy wywoływaniu metod, np 'obiekt.metoda(parametry)' to w dużej mierze to samo co 'metoda(obiekt, parametry)'. Metoda statyczna nie ma żadnego implicite parametru.
Klasa statyczna wewnętrzne nie ma implicite thisa na klasę otaczającą, stąd nie może się dobrać do metod i pól klasy zewnętrznej, no chyba, że przez explicit referencję.

Kup se książkę i poczytaj :]

0

przeczytałbym to, gdyby odpowiedź na moje pytanie była zawarta. W mojej książce akurat nie ma, a Ty mi też nie odpowiedziałeś. To co napisałeś, to wszystko wiem. :)
Zatem zadaję pytanie jeszcze raz:
Czym różnią się zmienne/funkcje/klasy statyczne w JAVIE od zwykłych atrybutów/metod/klas?** W sensie**, czym różnią się dla Wirtualnej maszyny i w bytekodzie?

1

Jak chcesz się dowiedzieć czym się różnią w bytekodzie to najłatwiej będzie sobie ten bytekod podejrzeć. 'javap -c' i jedziesz. A co do JVMki - jest specyfikacja: http://docs.oracle.com/javase/specs/jvms/se7/html/

Dużo zależy od tego jak dużo szczegółów chcesz wiedzieć. Jeśli chodzi np o kolejność inicjalizacji to sprawa jest taka, że:

  • przy dziedziczeniu najpierw są odpalane konstruktory i inicjalizacja pól z klas wyżej w hierarchii,
  • pola statyczne są inicjalizowane przy ładowaniu klasy, a klasa jest ładowana przy pierwszym użyciu,

1 użytkowników online, w tym zalogowanych: 0, gości: 1