Hello World - Wersja tradycyjna i uproszczona
Naukę języka programowania zwykle rozpoczyna się od napisania programu o nazwie Hello World, który wyświetla tekst Hello World! na standardowym wyjściu urządzenia, zazwyczaj na ekranie. W Javie możemy napisać ten program następująco:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
W tym programie mamy klasę o nazwie Hello. W systemach obiektowych klasy pomagają modelować pojęcia z badanego obszaru zastosowania. Klasy hermetyzują zarówno dane, jak i zachowanie związane z określonym pojęciem.
Klasa Hello ma jedną metodę o nazwie main, która otrzymuje tablicę łańcuchów znaków zawierającą argumenty wiersza poleceń przekazane podczas uruchamiania programu, jeśli takie istnieją. W tym przykładzie argumenty te nie są używane.
Metoda main jest statyczna, co oznacza, że jest metodą klasy, a nie metodą instancji. Dlatego można ją wywołać bez tworzenia obiektu klasy Hello.
Wewnątrz metody main znajduje się wywołanie metody println. Metoda ta należy do klasy PrintStream i wyświetla na ekranie wartość przekazaną jako argument, a następnie terminator wiersza.
Metoda println jest wywoływana za pośrednictwem pola out klasy System. Pole to ma typ PrintStream i zapewnia dostęp do standardowego wyjścia systemu.
Kompilacja i wykonanie
Programy Java są najpierw kompilowane do pośredniej reprezentacji zwanej bajtkodem, co zapewnia przenośność. Następnie bajtkod jest wykonywany przez Java Virtual Machine (JVM), która przekształca go w kod maszynowy odpowiedni dla danej platformy.
Aby skompilować program, należy zapisać go w pliku o nazwie Hello.java. W Javie pliki zawierające typy publiczne mają zwykle taką samą nazwę jak typ.
Możemy użyć zintegrowanego środowiska programistycznego (IDE) albo wywołać kompilator bezpośrednio z wiersza poleceń, pod warunkiem że zainstalowany jest JDK.
Programy Java są zwykle pisane w IDE, które zapewnia funkcje zwiększające produktywność podczas programowania, takie jak nawigacja po kodzie źródłowym, refaktoryzacja, analiza statyczna, kompilacja, testowanie i debugowanie.
Niektóre z najpopularniejszych IDE dla Javy to:
Program możemy również skompilować bezpośrednio z wiersza poleceń za pomocą kompilatora javac:
javac Hello.java
Polecenie przyjmuje Hello.java jako dane wejściowe i tworzy plik Hello.class, zawierający skompilowaną wersję programu.
Po kompilacji możemy uruchomić program za pomocą polecenia java:
java Hello
Wynik będzie następujący:
Hello World!
Prostsze podejście w Javie 25+
Od Javy 25 funkcja rozwijana jako preview od Javy 21 stała się częścią języka: Compact Source Files and Instance Main Methods. Pozwala ona pisać małe programy z mniejszą ilością kodu pomocniczego poprzez pominięcie jawnej deklaracji klasy i uproszczenie metody main.
Poprzedni program można więc teraz zapisać w Javie 26 (obecnej wersji) następująco:
void main() {
IO.println("Hello World!");
}
W tym przypadku nie musimy jawnie deklarować klasy ani pisać public static void main(String[] args). Kompilator traktuje plik jako taki, który niejawnie deklaruje klasę, a metoda main może być metodą instancji.
Możemy również użyć klasy IO, która udostępnia proste operacje wejścia i wyjścia konsoli. W Javie 26 IO należy do pakietu java.lang, więc jest dostępna niejawnie. Aby wywołać jej metody, musimy jednak użyć nazwy klasy, jak w IO.println(...).
Ponieważ funkcja ta nie jest już w fazie preview, nie potrzebujemy żadnych specjalnych opcji kompilacji. Program można skompilować normalnie:
javac Hello.java
i uruchomić w ten sam sposób:
java Hello
Możliwe jest również bezpośrednie uruchomienie pliku źródłowego za pomocą programu uruchamiającego java:
java Hello.java
W tym przypadku kod źródłowy jest kompilowany w pamięci przez sam program uruchamiający przed wykonaniem. Mechanizm ten pozwala uruchamiać programy bezpośrednio z plików źródłowych bez jawnego tworzenia pliku .class.
Kompaktowe pliki źródłowe są szczególnie interesujące w przypadku małych przykładów, programów edukacyjnych, skryptów i eksperymentów. Gdy program rośnie i wymaga bardziej rozbudowanej struktury, możemy naturalnie powrócić do tradycyjnej formy z jawnymi deklaracjami klas i metod.
Proces wykonywany przez IDE jest zasadniczo podobny. Oprócz kompilacji i uruchamiania zapewniają one funkcje debugowania, testowania, refaktoryzacji, tworzenia i zarządzania projektami, tworzenia bibliotek, zarządzania wersjami i wiele innych.
Ten artykuł jest adaptacją treści z książki Orientação a Objetos com Java autorstwa Eduardo Kessler Piveta.