Menu

Składnia Javy: klasy, metody, instrukcje i nawiasy klamrowe

Budowa programu w Javie: metoda main, instrukcje i średniki, bloki i nawiasy klamrowe oraz reguły, których kompilator pilnuje, zanim twój kod w ogóle się uruchomi.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Jak wygląda program w Javie

Z poprzedniej strony wiesz już, jak uruchomić Javę. Teraz przyjrzyjmy się, z czego tak naprawdę składa się sam kod. Java jest rygorystyczna i jawna: każdy program musi mieć ustaloną budowę, a kompilator sprawdza ją, zanim wykona się choć jedna linia.

Oto najmniejszy kompletny program w Javie. Uruchom go:

To sporo słów jak na wypisanie jednej linii i, w odróżnieniu od Pythona czy JavaScriptu, żadnego nie da się pominąć. Każdy element jest wymagany, więc warto rozumieć, co robi. Rozbierzemy go na części od zewnątrz do środka.

Wszystko żyje w klasie

W Javie nie ma „luźnego” kodu na najwyższym poziomie pliku. Cały kod znajduje się wewnątrz klasy, deklarowanej słowem kluczowym class i nazwą:

public class Main {
    // everything goes in here
}

Otwierający { i pasujący do niego zamykający } wyznaczają ciało klasy. Nazwę Main wybierasz sam, z jedną ważną zasadą: w zwykłym pliku .java klasa public musi dokładnie odpowiadać nazwie pliku. public class Main należy do Main.java. Pomyłka w wielkości liter sprawi, że kompilator odmówi zbudowania kodu.

Czym naprawdę są klasy, dowiesz się w rozdziale o klasach. Na razie traktuj public class Main { ... } jako obowiązkowe opakowanie twojego kodu.

Metoda main to linia startu

Gdy uruchamiasz program w Javie, środowisko uruchomieniowe szuka jednej konkretnej metody, od której zaczyna wykonanie:

public static void main(String[] args) {
    // your code starts here
}

Ta sygnatura nie podlega negocjacjom. Każde słowo ma swoje zadanie:

  • public: środowisko uruchomieniowe może się do niej dostać spoza klasy.
  • static: działa bez wcześniejszego tworzenia obiektu klasy.
  • void: po zakończeniu niczego nie zwraca.
  • main: dokładna nazwa, której szuka środowisko uruchomieniowe.
  • String[] args: tablica z argumentami wiersza poleceń przekazanymi do programu.

Jeśli choć jedno słowo się nie zgadza (Static zamiast static, String args zamiast String[] args), kod może się nadal skompilować, ale uruchomienie zakończy się błędem Error: Main method not found in class Main. Ten komunikat prawie zawsze oznacza literówkę w tej linii.

Instrukcje kończą się średnikiem

Instrukcja to jedno kompletne polecenie. W Javie każda instrukcja kończy się średnikiem ;. Kompilator po średniku poznaje, gdzie kończy się jedno polecenie, a zaczyna następne. Znaki nowej linii go nie obchodzą.

Ponieważ podziały linii są ignorowane, wszystkie trzy instrukcje mogłyby stać w jednej linii i nadal działać, choć nikt tak nie pisze w Javie:

int score = 90; score = score + 5; System.out.println(score);

Zapomnij o średniku, a kompilator zatrzyma cię, zanim program się uruchomi:

int score = 90
System.out.println(score);
error: ';' expected
        int score = 90
                      ^

Brakujący średnik to najczęstszy błąd kompilacji, na jaki trafisz na początku. Gdy kompilator wskazuje linię, sprawdź też linię nad nią: często to tam jest prawdziwe przeoczenie.

Bloki i nawiasy klamrowe

Nawiasy klamrowe { } grupują instrukcje w blok. Ciało klasy to blok, ciało metody to blok, a ciało if lub pętli to też blok. Bloki można zagnieżdżać w innych blokach:

Zwróć uwagę na różnicę względem instrukcji: linia, która otwiera blok, kończy się znakiem {, a nie średnikiem, i nie stawia się średnika po zamykającym } metody, klasy, if czy pętli. Mylenie tego to klasyczny błąd na starcie:

public static void main(String[] args) {
    System.out.println("hi");
}; // <- this semicolon is unnecessary (and after a class/method, wrong)

Wcięcia w przykładach są wyłącznie dla ludzi. Java je ignoruje, ale spójne wcięcia pozwalają tobie i wszystkim innym śledzić, który { pasuje do którego }. Pozwól edytorowi robić wcięcia automatycznie, a nawiasy same się wyrównają.

Java rozróżnia wielkość liter

Java traktuje wielkie i małe litery jako coś zupełnie innego. score, Score i SCORE to trzy osobne nazwy. To samo dotyczy słów kluczowych i nazw wbudowanych:

Kod z system.out.println (z małym s) albo z String Name, a potem z próbą użycia name, zostałby odrzucony przez kompilator. Kilka nazw, w których początkujący często mylą wielkość liter:

  • System: wielkie S. system.out.println(...) się nie skompiluje.
  • String: wielkie S. To klasa, w odróżnieniu od typów prostych pisanych małymi literami.
  • void, int, public, static: wszystkie małymi literami. To słowa kluczowe.

Większość błędów „cannot find symbol” wynika z pomyłki w wielkości liter. Sam błąd mówi, którego symbolu nie udało się znaleźć: porównaj jego zapis z tym, co jest w twoim kodzie.

Składamy wszystko razem

Oto nieco większy program, który wykorzystuje wszystko z tej strony: klasę, metodę main, kilka instrukcji, zagnieżdżony blok i spójną wielkość liter:

Przeczytaj go od góry do dołu: klasa obejmuje wszystko, main to miejsce, w którym zaczyna się wykonanie, każde polecenie kończy się ;, ciało if jest zgrupowane we własnym bloku, a każda wbudowana nazwa ma poprawną wielkość liter. To szkielet praktycznie każdego programu w Javie, jaki napiszesz.

Dalej: komentarze

Umiesz już odczytać strukturę pliku w Javie. Następna rzecz do dodania to notatki dla ludzi: tekst, który kompilator całkowicie ignoruje. Kolejna strona omawia komentarze: jednoliniowe //, blokowe /* */ i to, kiedy komentarz naprawdę zasługuje na miejsce w kodzie.

Najczęściej zadawane pytania

Jaka jest podstawowa składnia programu w Javie?

Każdy program w Javie żyje wewnątrz klasy, a wykonanie zaczyna się w metodzie o dokładnej sygnaturze public static void main(String[] args). Instrukcje kończą się średnikiem, a bloki kodu grupuje się nawiasami klamrowymi { }. Minimalny program to public class Main { public static void main(String[] args) { System.out.println("Hi"); } }.

Po co Javie public static void main(String[] args)?

To dokładnie ten punkt wejścia, którego szuka środowisko uruchomieniowe Javy. public pozwala wywołać metodę z zewnątrz, static oznacza, że działa bez wcześniejszego tworzenia obiektu, void oznacza, że nic nie zwraca, a String[] args odbiera argumenty wiersza poleceń. Zmień dowolne słowo (nawet wielkość liter), a program się skompiluje, ale nie wystartuje i pokaże Error: Main method not found.

Czy każda instrukcja w Javie potrzebuje średnika?

Każda instrukcja kończy się średnikiem: deklaracje zmiennych, przypisania, wywołania metod. Linie, które otwierają blok (if, for, while, nagłówek klasy lub metody), kończą się jednak znakiem {, a po zamykającym } takich bloków nie stawia się średnika. Zapomniany średnik to najczęstszy błąd kompilacji u początkujących w Javie.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ