~~NOCACHE~~
~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~
====== Java - Historia ======
* 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),
* [[wp>Java_version_history|Historia wersji Javy - Wikipedia]]
===== Java - charakterystyka =====
* język programowania wysokiego poziomu, obiektowy, z silnym typowaniem
* platforma programistyczna (Java Platform) - środowisko uruchomieniowe (JRE), biblioteki klas, narzędzia programistyczne (kompilator, debugger itp.)
* "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
===== =====
{{ zajecia:java_2026_1:bytecode-compilation.png?800 |}}
===== JRE =====
{{ zajecia:java_2026_1:jre-components.png?800 |}}
===== JDK (Java Development Kit) =====
{{ zajecia:java_2026_1:jdk-components.png?800 }}
===== 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
* [[https://openjdk.org/|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
* **[[http://www.kaffe.org/|Kaffe]]** - darmowa, otwartoźródłowa, rozwijana przez społeczność (inżynieria wsteczna klasycznej implementacji Javy)
* [[https://aws.amazon.com/corretto/|Amazon Corretto]], [[https://www.azul.com/downloads/?package=jdk#zulu|Azul Zulu]], [[https://harmony.apache.org/|Apache Harmony]], [[https://www.ibm.com/support/pages/java-sdk-downloads|IBM Dev Kit]], [[https://adoptium.net/|Eclipse Temurin]], ...
===== IDE =====
* [[https://www.jetbrains.com/idea/|IntelliJ IDEA]] - The Leading IDE for Professional Development in Java and Kotlin (JetBrains)
* [[https://www.eclipse.org/downloads/|Eclipse]] - darmowe, otwartoźródłowe IDE dla Javy
* [[https://netbeans.apache.org/front/main/index.html|NetBeans]] - darmowe, otwartoźródłowe IDE dla Javy (Apache)
* [[https://code.visualstudio.com/docs/languages/java|Visual Studio Code]] - lekki edytor kodu z rozszerzeniami do obsługi Javy (Microsoft)
===== Hello World =====
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
===== Więcej w temacie =====
* [[https://www.sohamkamani.com/java/ecosystem/|The Java Ecosystem Explained - How Java Runs Your Code]]
* [[https://dev.to/chandra179/java-ecosystem-in-detail-5f5p|Java Ecosystem Overview ]]