1991 - rozpoczęcie prac nad językiem Java (początkowo Oak), James Gosling i zespół Sun Microsystems
1995 - wydanie pierwszej wersji (Java 1.0)
1996 - Java staje się darmowa dla wszystkich użytkowników
1998 - Java 2 (J2EE) - podział na SE (Standard), EE (Enterprice), ME (Micro)
2014 - Java 8, 2018 Java 11 (LTS) - kamienie milowe, które wprowadziły największe zmiany w praktyce programistycznej, od Java 11 Oracle JDK wymaga płatnej subskrypcji do użytku komercyjnego, co spowodowało wzrost popularności darmowych implementacji JDK (OpenJDK, Amazon Corretto, itp.)
2021 Java 17 (LTS), 2023 Java 21 (LTS) - obecnie rekomendowane dla nowych projektów.
Obecnie Java rozwijana jest przez firmę Oracle (w 2010 roku Sun został przejęty przez Oracle)
regularne wydania nowych wersji Javy co kilka miesięcy, z nowymi funkcjami i ulepszeniami
najnowsza Java 25 SE (LTS), rozwijana Java 26 SE (planowane wydanie 17 marzec 2026),
„Write Once, Run Anywhere” - kod napisany w Javie może być uruchamiany na różnych platformach dzięki maszynie wirtualnej (JVM)
szerokie zastosowanie
duża społeczność, bogaty ekosystem bibliotek i narzędzi, wsparcie dla wielu paradygmatów programowania (obiektowy, funkcyjny, itp.)
Zastosowanie
aplikacje desktopowe, okienkowe (np. Swing, JavaFX)
aplikacje webowe (np. Spring, JavaServer Pages)
aplikacje mobilne (Android)
systemy wbudowane (np. Raspberry Pi)
duże systemy korporacyjne (bankowość, ubezpieczenia, itp.)
gry (np. Minecraft)
nauka programowania - Java jest często wybierana jako pierwszy język programowania ze względu na swoją prostotę i czytelność
Platformy Java
Java SE (Standard Edition) - podstawowa platforma Java, zawiera podstawowe biblioteki i narzędzia do tworzenia aplikacji desktopowych, konsolowych itp.
Java EE (Enterprise Edition) - wersja Javy przeznaczona dla aplikacji korporacyjnych (J2EE, obecnie Jakarta EE), zawiera dodatkowe biblioteki i narzędzia do tworzenia aplikacji webowych, serwerów aplikacji, itp.
Java ME (Micro Edition) - wersja Javy przeznaczona dla urządzeń o ograniczonych zasobach (telefony, IoT, itp.)
inne specjalistyczne, np: Java Card do tworzenia aplikacji dla kart inteligentnych (smart cards)
Java, JVM, JRE, JDK ?
Java - język programowania
JVM (Java Virtual Machine) - maszyna wirtualna, która uruchamia kod Java, tłumacząc go na instrukcje zrozumiałe dla konkretnej platformy (języki Java, Scala, Kotlin, Groovy, Clojure, JRuby, Jython)
JRE (Java Runtime Environment) - środowisko uruchomieniowe, które zawiera JVM oraz biblioteki klas potrzebne do uruchamiania aplikacji Java
JDK (Java Development Kit) - zestaw narzędzi programistycznych, który zawiera JRE oraz dodatkowe narzędzia do tworzenia aplikacji Java (kompilator javac, debugger itp.)
Bytecode
kod bajtowy (bytecode) - pośrednia reprezentacja kodu Java, która jest generowana przez kompilator javac z kodu źródłowego Java
kod bajtowy jest niezależny od platformy i może być uruchamiany na dowolnej maszynie wirtualnej (JVM)
kod bajtowy jest interpretowany lub kompilowany just-in-time (JIT) przez JVM podczas uruchamiania aplikacji, co pozwala na optymalizację wydajności
JRE
JDK (Java Development Kit)
Narzędzia JDK
javac - kompilator, tłumaczy kod źródłowy Java na kod bajtowy (bytecode), który jest uruchamiany przez JVM
java - uruchamia aplikację Java, wykonując kod bajtowy
javadoc - generowanie dokumentacji z komentarzy w kodzie źródłowym
jdb - debugger
jar - tworzenie archiwów JAR (Java ARchive), spakowane aplikacje Java wraz z bibliotekami
javap - deasembler
javah - generowania nagłówków C dla natywnych metod (od Java 8 zastąpione javac -h)
Dostępne są różne implementacje JDK, np. Oracle JDK, OpenJDK, Amazon Corretto, itp.
Implementacje Javy
Oracle JDK - oficjalna implementacja JDK, rozwijana przez Oracle, z dodatkowymi narzędziami i wsparciem płatnym
OpenJDK - otwartoźródłowa implementacja JDK, GNU GPL, rozwijana przez społeczność i firmy (np. Red Hat, Amazon, Microsoft).
KVM Kilobyte Virtual Machine dla urządzeń z procesorami 16- i 32-bitowymi, pracujące z częstotliwością 12-60 MHz oraz 128 kB pamięci RAM