~~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 ]]