Java — język programowania i platforma (JVM, Android, LTS)
Java — język i platforma: JVM, Android, wersje LTS (Java 8/11/17). Poznaj cechy obiektowe, przenośność, kompatybilność i zastosowania mobilne oraz korporacyjne.
Java to nazwa języka programowania i towarzyszącej mu platformy uruchomieniowej stworzonej pierwotnie przez Sun Microsystems. Firma ta została przejęta przez Oracle Corporation, która od tego czasu nadzoruje rozwój komercyjnych wydań Javy, chociaż rozwój OpenJDK prowadzi aktywna społeczność i wiele innych organizacji. Java jest dostępna w wielu wydaniach: istnieją szybkie, półroczne wydania funkcjonalne oraz wydania długoterminowego wsparcia (LTS). Po Java 11 (LTS, wydanej 25 września 2018) kolejnymi ważnymi wersjami LTS były Java 17 (wydana we wrześniu 2021) oraz Java 21 (LTS, wydana we wrześniu 2023). Warto zaznaczyć, że polityka aktualizacji i licencjonowania Oracle zmieniła się na przestrzeni lat — Oracle udostępniał ostatnie bezpłatne publiczne aktualizacje dla Java 8, a dla nowszych wersji komercyjnych aktualizacji często wymaga subskrypcja; alternatywne, darmowe binaria OpenJDK (np. dostarczane przez Eclipse Temurin, Amazon Corretto, Azul i inne) są powszechnie stosowane.
Java, która w fazie projektowej była nazywana Dębem (Oak), jest przede wszystkim językiem zorientowanym obiektowo. Oznacza to, że programy składają się z obiektów, które ze sobą współpracują, choć Java równocześnie udostępnia typy prymitywne (int, boolean, itp.) dla wydajności. Składnia Javy przypomina języki takie jak C, C++ czy C#, jednak kod napisany w tych językach zwykle nie zadziała w Javie bez modyfikacji — różnią je semantyka, model pamięci i biblioteki standardowe. W ciągu kolejnych wydań Java zyskała wiele nowoczesnych cech: generics (Java 5), lambda i strumienie (Java 8), system modułów JPMS (Java 9), inferencję typu lokalnego (var, Java 10), records i sealed classes w późniejszych wydaniach — dzięki temu język ewoluuje, zachowując jednak silne zasady kompatybilności wstecznej.
Platforma, kompilacja i Java Virtual Machine (JVM)
Jednym z kluczowych założeń Javy jest przenośność: kod źródłowy kompilowany jest przez kompilator Javy do postaci bajt-kodu (bytecode), a nie natywnego kodu maszynowego. Ten bajt-kod jest uruchamiany przez Java Virtual Machine (JVM), która interpretuje i/lub kompiluje just-in-time (JIT) bajt-kod do kodu maszynowego konkretnej platformy. Dzięki temu programy „napisane raz” mogą działać „wszędzie tam, gdzie jest JVM”. W praktyce istnieje wiele implementacji JVM (np. HotSpot od Oracle, OpenJ9 od IBM, GraalVM oferujący dodatkowe możliwości AOT/JIT), a także różne garbage collectory (G1, ZGC i inne), które wpływają na wydajność i zużycie pamięci.
Java na systemach operacyjnych i Android
Java działa na większości popularnych systemów operacyjnych (Windows, Linux, macOS) oraz w środowiskach serwerowych i wbudowanych. W kontekście urządzeń mobilnych warto podkreślić rolę Androida, najpopularniejszego mobilnego systemu operacyjnego na świecie. Android przez długi czas korzystał z języka Java i z narzędzi związanych z Javą (choć na urządzeniach Android bajt-kod Javy był przekształcany do formatu zoptymalizowanego dla Dalvik/ART — runtime Androida). Obecnie Google promuje język Kotlin jako preferowany dla rozwoju aplikacji Android, ale Java nadal jest szeroko stosowana i w pełni interoperacyjna z Kotlinem — istnieje możliwość współistnienia kodu Javy i Kotlina w tym samym projekcie.
Ekosystem i zastosowania
Java to nie tylko język — to bogaty ekosystem narzędzi i bibliotek. W praktyce programiści Javy korzystają z JDK (Java Development Kit), systemów budowania i zarządzania zależnościami (Maven, Gradle), kontenerów aplikacyjnych i frameworków takich jak Spring (szeroko stosowany w aplikacjach serwerowych/enterprise), a także bibliotek do tworzenia GUI (Swing, JavaFX), narzędzi Big Data (Hadoop, Spark) i wielu innych. JVM jest też platformą dla innych języków (Kotlin, Scala, Groovy), co zwiększa elastyczność zastosowań.
Cechy języka i programowania
- Silne typowanie i sprawdzanie typów w czasie kompilacji.
- Automatyczne zarządzanie pamięcią przez garbage collector — ułatwia programowanie, choć wymaga zrozumienia modelu pamięci przy aplikacjach o dużych wymaganiach wydajnościowych.
- Wbudowane mechanizmy obsługi wyjątków (checked/unchecked exceptions).
- Biblioteka standardowa (Java API) zawiera rozległe API do pracy z kolekcjami, I/O, sieciami, wątkami i synchronizacją.
- Wsparcie dla programowania współbieżnego i równoległego (java.util.concurrent).
Zalety i ograniczenia
Do zalet Javy należą przenośność, rozbudowany ekosystem, stabilność i silne wsparcie korporacyjne. Java jest powszechnie używana w aplikacjach serwerowych, systemach bankowych, usługach webowych i dużych projektach, gdzie wymagane jest długoterminowe wsparcie. Ograniczenia to m.in. narzut pamięciowy i czasami niższa wydajność startu (start-up) aplikacji w porównaniu do języków kompilowanych natywnie — na co powstały rozwiązania typu AOT (np. GraalVM Native Image) oraz optymalizacje JVM.
Podsumowanie
Java to dojrzały i wszechstronny język oraz platforma uruchomieniowa, której siłą jest niezawodność, bogactwo bibliotek i szerokie zastosowanie w przemyśle. Dzięki modelowi kompilacji do bajt-kodu i uruchamianiu na JVM zapewnia przenośność między systemami, a jednocześnie rozwija się zgodnie z nowymi trendami (funkcyjne elementy, modularność, ulepszenia wydajności). Dla osób zaczynających lub planujących rozwój w obszarze backendu, aplikacji korporacyjnych czy systemów rozproszonych znajomość Javy i ekosystemu JVM pozostaje bardzo cenna.
Koncepcje Java
Java została opracowana w celu osiągnięcia pięciu głównych celów. Są to:
- Java powinna być łatwa do nauki, obiektowa i rozproszona.
- Jawa powinna być bezpieczna i silna.
- Java nie powinna być zależna od jakiejkolwiek architektury czy platformy komputerowej.
- Java powinna dobrze funkcjonować.
- Java powinna być w stanie mieć napisany dla niej interpreter, wspierać równoległość i używać dynamicznego pisania.
Platforma Java
Platforma Java odnosi się do grupy produktów programowych firmy Sun Microsystems. Platforma ta służy do tworzenia i uruchamiania programów w języku Java. Platforma zawiera silnik wykonawczy (zwany Wirtualną Maszyną Java), który pozwala programom Java robić to samo na różnych systemach komputerowych.
Ta zdolność do tworzenia oprogramowania na jednej platformie i uruchamiania go na innych platformach nazywana jest "zdolnością międzyplatformową".
Przykład programu Java
Przykładowy program Java "Hello World":
Rodzaje programów Java
Istnieje wiele typów programów Java, które działają w różny sposób:
- Aplet Java - niewielki program napisany w języku Java, który jest pobierany ze strony internetowej i wykonywany w przeglądarce internetowej na komputerze klienckim.
- Aplikacja - wykonuje się na komputerze klienckim. Jeśli jest online, to przed uruchomieniem musi zostać pobrana.
- Plik JAR (archiwum Java) - używany do łączenia plików Java w jeden plik (prawie dokładnie taki sam jak plik .zip).
- Servlet - działa na serwerze internetowym i pomaga w generowaniu stron internetowych.
- Aplikacja Swing - służy do zbudowania aplikacji, która posiada GUI (okna, przyciski, menu, itp.).
- EJB - działa na serwerze www i służy do tworzenia dużych, złożonych stron internetowych.
Korzyści
Java jest powszechnie używana do nauczania studentów, jak programować jako pierwszy język, ale nadal jest używana przez profesjonalistów.
- Java wymaga, aby każda zmienna została zainicjowana. Niektóre starsze języki, takie jak C, pozwalają na nieinicjalizację zmiennych, co może powodować losowe awarie z tajemniczymi błędami.
- Java wymaga, aby każda metoda deklarowała typ zwrotu - metoda powinna zawsze zwracać wartość, chyba że jej typ zwrotu jest nieważny. Zapobiega to również błędom.
- Java posiada duży zestaw klas i metod, Java API, które może być używane bez konieczności tworzenia jak największej ilości kodu "od zera".
- W przeciwieństwie do C, typy prymitywne Java, takie jak int, są zawsze tej samej wielkości w liczbie bitów, co pomaga osiągnąć zgodność międzyplatformową.
- Kiedyś uważano, że Java jest wolniejsza od C, ale w ostatnich latach stało się to mniej ważne, ponieważ komputery są szybsze.
- Java posiada obsługę wyjątków, która wymaga od programisty obsługi warunków błędów, takich jak błędy wejścia/wyjścia.
- Kod skompilowany na jednej platformie Java może być uruchamiany na innych platformach obsługujących Java bez modyfikacji kodu źródłowego lub bajtowego. Oznacza to, że dana osoba może stworzyć program w języku Java dla komputera z systemem Windows i uruchomić go na komputerze z systemem Linux lub Mac.
Krytyka
Krytykowana jest również Java. Niektóre z krytyk są:
- Generyki zostały dodane do Javy w taki sposób, aby istniejący kod nadal działał. Zostało to zrobione przy użyciu funkcji wymazywania typów. Oznacza to, że podczas kompilacji, rzeczywisty typ argumentu generycznego jest usuwany. Może to prowadzić do nieoczekiwanych zachowań interpretera Java.
- Java nie ma niepodpisanych typów liczb całkowitych, których języki takie jak C intensywnie używają. Oznacza to również, że nie ma możliwości bezpośredniej wymiany danych liczbowych między programami w języku C i Java. Kryptografia również w pewnym stopniu opiera się na takich typach, co utrudnia pisanie aplikacji, które wykorzystują kryptografię w Javie.
- IEEE zdefiniowało standard dla arytmetyki zmiennoprzecinkowej, IEE 754. Java obsługuje tylko część funkcji tego standardu.
Pytania i odpowiedzi
P: Jak nazywa się język programowania stworzony przez Sun Microsystems?
O: Język programowania stworzony przez Sun Microsystems nazywa się Java.
P: Kto obecnie wspiera i aktualizuje Javę?
O: Korporacja Oracle obecnie wspiera i aktualizuje Javę.
Q: Jakie są aktualne wersje Javy objęte długoterminowym wsparciem (LTS)?
A: Aktualne wersje Javy objęte długoterminowym wsparciem (LTS) to wersja 17, 11 i 8.
P: Kiedy została wydana najnowsza wersja Javy?
O: Najnowsza wersja Javy, wersja 19, została wydana we wrześniu 2022 roku.
P: Czy oprócz Oracle jest jeszcze jakaś firma, która wspiera Javę?
O: Tak, Eclipse Adoptium również wspiera Javę co najmniej do maja 2026 dla wersji 8 i co najmniej do września 2027 dla wersji 17.
P: Jakiego rodzaju kodu używa Java?
O: Java wykorzystuje kod zorientowany obiektowo, co oznacza, że jest oparty na obiektach, które współpracują ze sobą, aby programy wykonywały swoje zadania. Wygląda to podobnie do C, C++ lub C#, ale kod napisany w tych językach w większości przypadków nie będzie działał bez zmian.
P: W jaki sposób Java uniezależnia się od platformy?
O: Java uniezależnia się od platformy, ponieważ kompilator przekształca kod w specjalny format zwany kodem bajtowym zamiast kodu maszynowego. Oznacza to, że gdy program jest wykonywany, kod bajtowy może być interpretowany przez specjalny program zwany maszyną wirtualną, która tłumaczy go na kod maszynowy, dzięki czemu może on działać na różnych systemach operacyjnych, takich jak Android.
Przeszukaj encyklopedię