Wpis z mikrobloga

Obczajam sobie właśnie Javę i mam małe pytanko. W C++ mamy funkcję int main(), w której można robić różne rzeczy na podstawie zdefiniowanych wcześniej funkcji itp.

Jak dobrze paczę, Java działa troszkę inaczej. Ale z tego co widzę też jest taka funkcja, która jest odpowiednikiem int main() z C++ -

public static void main(String[] args)
Poza tym klasy w oddzielnych plikach każda - dziwne, ale może jeszcze nie łapię o co chodzi, w końcu dopiero zaczynam.

No i teraz pytanko. Definiuję sobie funkcję - no tu się to nazywa metodą np.

int dodawanie(int a)
{
return a+a;
}

Jak widzę nie ma to znaczenia, czy jest przed metodą main zadeklarowana, czy po. Kompilator ogarnia. Nie rozumiem tylko tego słówka static - modyfikatora. Dlaczego moja metoda dodawanie musi też mieć static, bo inaczej kompilator płacze? I co to oznacza, tak na chłopski rozum. Nie chce wierszyków i definicji, chce wytłumaczenia.

#programowanie #java
  • 17
@AvalonYuuna: metody bez static, to metody należące do klasy jako obiektu, można je wykonywać na instancjach danej klasy.
A metody statyczne są "niezależne", nie musi być żadnej instancji klasy.

Tak samo jest z polami, statyczne pola są dostępne z każdego miejsca/obiektu (+ modyfikator dostępu), a nie-statyczne tylko za pomocą instancji klasy -> obiektu, i każdy obiekt ma tam własne wartości.

KlasaObiektu obiekt = new KlasaObiektu();
obiekt.metoda();
KlasaObiektu.statycznaMetoda();
@AvalonYuuna:

jest taka funkcja, która jest odpowiednikiem int main() z C++ -


@AvalonYuuna: tak, metoda main() jest swego rodzaju entry-pointem do aplikacji (do uruchomienia potrzebujesz wskazać klasę, którą będziesz uruchamiać), main() jest metodą statyczną więc możesz ją zawołać bez instancji klasy (tzn. przy uruchomieniu zrobi to za Ciebie środowisko uruchomieniowe) i dopiero w tej metodzie dopiero tworzysz sobie instancję tej klasy (albo innych), żeby cieszyć się obiektowością, stąd większość prostych
@AvalonYuuna: i to jest jedna z największych patologii javy (wiem, wiem, nie każdemu się to spodoba co teraz napiszę ale trudno) że w nie da się uciec od klas i tworzenia obiektów. I ktoś kto zaczyna naukę programowania od Javy to już na początku ma problem żeby skumać abstrakcję - a i zwykle zaczyna się uczyć tego źle bo na debilnych przykładach, które nie mają zastosowania w rzeczywistości.
Na początek lepiej
@b0lec: Patologią języka obiektowego jest to, że trzeba używać obiektów? Przemyśl to jeszcze raz.
To tak, jakby napisać, że patologią drewnianego domu jest to, że jest z drewna.
@sorhu: chyba użyłem niewłaściwych słów, chodzi mi o to że brakuje mi w javie swobody takiej jak w innych językach.
Ale to takie moje w sumie marudzenie