Witam
Mozecie mi wytłumaczyc kiedy uzywa sie metod statycznych (static). Czytam rózne kursy ale jakos do mnie nie przemiawiaja.
Witam
Mozecie mi wytłumaczyc kiedy uzywa sie metod statycznych (static). Czytam rózne kursy ale jakos do mnie nie przemiawiaja.
Słowo kluczowe static umożliwia odwołanie się do składowej jakiejś klasy (składowej: zmiennej lub metody) bez konieczności tworzenia obiektu tej klasy. W takim wypadku musisz nazwę składowej poprzedzić kropką i nazwą tej klasy. I metoda static musi posiadać też zmienne zadeklarowane jako static.
O to chodzi
public class klasa {
public static void main(String[] args)
{
Klasa2.metoda1();
}
}
public class Klasa2
{
static void metoda1()
{
System.out.println("Metoda statyczna");
}
}
Utwórz sobie klasę z polem statycznym int. W konstruktorze zwiększaj o 1. Utwórz kilka obiektów i za pomocą ostatniego sprawdź wartość. Wnioski nasuną się same.
Tak mu gadacie, że pewnie nic nie zrozumiał :D
Łopatologicznie:
Podczas, gdy wszystkie zmienne/funkcje nie-static należą do obiektu, zmienne/funkcje static należą do klasy. Oznacza to, że jeśli masz w klasie zmienną public int a = 0
i public static int b = 0
oraz dasz w konstruktorze tej klasy:
a++;
b++;
To gdy stworzysz np. 50 obiektów, w każdym wartość a
będzie równa 1, a wartość b
będzie wspólna i równa 50.
Innymi słowy, zmienne static
są WSPÓLNE i mają TĄ SAMĄ WARTOŚĆ dla wszystkich obiektów klasy.
Zgodzicie się bardziej doświadczeni programiści, że metody statyczne z wyjątkiem metody main pełnią tylko funkcję informacyjną, że pracują na polach statycznych? Wydaje mi się, że (prawie) zawsze można by usunąć i program będzie działać?
Metody static korzystają z pól static albo nie korzystają z żadnych pól. W tym drugim przypadku można zrezygnować ze słowa static, ale wymusi to tworzenie niepotrzebnych obiektów.
A czy to po prostu nie jest tak że deklaracja static (czy to pole czy metoda) mówi kompilatorowi, że utworzenie takiej metody/pola wywoływane jest tylko raz i ma się dostęp do takich metod/pól bezpośrednio z dowolnego miejsca w programie przez trzymanie tego cały czas w pamięci? Zawsze deklaracja static tworzona jest przed wywołaniem innych zmiennych i obiektów.