
Java programátor expert
Prinášame ti prehľad verzií Javy, porovnanie Java JDK, SE a LTS vydaní, a tiež zhrnutie najdôležitejších zmien v najnovších verziách – vrátane Java 24, ktorá opäť posúva hranice jazyka o krok ďalej. Získaš tak jasný obraz, aké sú hlavné rozdiely medzi verziami, čo prinášajú nové funkcie a na čo si dať pozor pri migrácii.
V článku sa dozvieš:
Java sa vyvíja nepretržite už viac než dve desaťročia a aby držala krok s modernými požiadavkami vývoja, prešla na polročný release model. Prvá agilná verzia bola Java SE 9, ktorá bola vydaná v septembri 2017. Verzia Java 10 sa následne objavila o polroka neskôr. Každých šesť mesiacov tak vychádza nová verzia Java JDK, ktorá prináša vylepšenia, opravy aj experimentálne funkcie.
Pre firmy a vývojárov je kľúčové rozumieť rozdielu medzi LTS verziami (Long-Term Support), ktoré zabezpečujú stabilitu a dlhodobú podporu, a non-LTS verziami, ktoré sú určené skôr na testovanie noviniek a prípravu na budúce LTS vydania.
Java JDK (Java Development Kit) je oficiálny balík nástrojov, ktorý slúži na vývoj aplikácií v Jave. Obsahuje kompilátor javac
, ktorý prekladá zdrojový kód do bytekódu spustiteľného na Java Virtual Machine (JVM), ďalej debugger, knižnice štandardného API, dokumentáciu a rôzne nástroje na správu a testovanie aplikácií. JDK je teda nevyhnutné pre každého vývojára, pretože poskytuje kompletné prostredie na písanie, kompiláciu, spúšťanie aj ladenie kódu.
Okrem základných nástrojov ponúka JDK aj rôzne pomocné utility, ako napríklad javadoc
na generovanie dokumentácie priamo zo zdrojového kódu alebo jlink
na vytváranie vlastných runtime obrazov Javy. Je dôležité odlíšiť ho od JRE (Java Runtime Environment), ktoré slúži iba na spúšťanie už hotových aplikácií. Kým JRE používajú koncoví užívatelia, JDK je určené primárne pre vývojárov – bez neho by nebolo možné aplikácie v Jave vytvárať ani testovať.
Java SE (Java Platform, Standard Edition) je základná edícia platformy Java, ktorá definuje štandardizované API, syntax a správanie jazyka. Obsahuje kľúčové knižnice a balíky, ako sú Collections, Concurrency, I/O, Networking, Security či XML spracovanie. Vďaka Java SE vzniká spoločný základ, na ktorom stoja všetky aplikácie a frameworky v Jave – od jednoduchých desktopových programov až po rozsiahle enterprise riešenia.
Java SE nie je nástroj na vývoj ako JDK, ale skôr „štandard“ a špecifikácia toho, čo má každá verzia Javy obsahovať. Je to oficiálna definícia jazyka, ktorú musia dodržiavať všetky implementácie Javy (napr. OpenJDK). Pre vývojárov predstavuje istotu, že kód napísaný podľa Java SE bude fungovať v každom prostredí kompatibilnom s týmto štandardom.
Java Runtime Environment (JRE) je prostredie určené na spúšťanie aplikácií napísaných v Jave. Obsahuje Java Virtual Machine (JVM), ktorá sa stará o preklad a vykonávanie bytekódu, a zároveň základné knižnice potrebné na chod programov. Na rozdiel od JDK neposkytuje nástroje na vývoj – jeho úlohou je iba zabezpečiť, aby už hotová aplikácia mohla fungovať na počítači alebo serveri.
JRE je teda vhodné pre koncových používateľov alebo produkčné prostredia, kde sa aplikácie iba spúšťajú, ale ďalej nevyvíjajú. Vývojár si väčšinou vystačí s JDK (ktoré JRE automaticky obsahuje), zatiaľ čo JRE samostatne využijú tí, ktorí aplikácie iba prevádzkujú.
Java LTS (Long-Term Support) predstavuje verzie Javy, ktoré majú garantovanú dlhodobú podporu od Oraclu alebo iných vendorov (Adoptium, Red Hat a pod.). Každá LTS verzia vychádza približne raz za tri roky a poskytuje firmám stabilitu, bezpečnostné záplaty a opravy chýb po dobu 8 a viac rokov. Práve preto sú LTS vydania najčastejšou voľbou pre enterprise projekty, kde je kľúčová spoľahlivosť a minimálne riziko pri prevádzke.
Na rozdiel od non-LTS verzií, ktoré sú podporované iba 6 mesiacov a slúžia najmä na testovanie noviniek, LTS verzie fungujú ako stabilné míľniky v histórii Javy. Vývojári a firmy spravidla migrujú priamo z jednej LTS na ďalšiu (napr. z Java 11 na 17 alebo 21), čím sa vyhnú problémom spojeným s krátkodobými vydaniami. LTS tak predstavuje bezpečný základ pre dlhodobé projekty a produkčné prostredie.
Kritérium | LTS (Long-Term Support) | non-LTS | JDK (Java Development Kit) | Java SE (Standard Edition) | JRE (Java Runtime Environment) |
---|---|---|---|---|---|
Dĺžka podpory | 8+ rokov (Oracle, vendor support) | 6 mesiacov | Obsahuje kompilátor javac , nástroje, debugger, dokumentáciu, knižnice |
Platforma a API definované štandardom (JLS, JVM, knižnice) | Obsahuje JVM + základné knižnice, bez vývojových nástrojov |
Vydanie | Každé 3 roky (napr. Java 11, 17, 21) | Každý polrok (napr. Java 12, 13, 14…) | Distribuuje sa s každou verziou Javy (LTS aj non-LTS) | Definuje, čo každá verzia Javy „musí mať“ | Viazané na konkrétnu verziu Javy, vydáva sa spolu s JDK |
Stabilita | Veľmi stabilné, odporúčané pre firmy a produkciu | Experimentálnejšie, prinášajú nové features rýchlejšie | Poskytuje všetky vývojové nástroje pre prácu s Javou | Obsahuje základné API (Collections, Streams, IO, Concurrency, atď.) | Stabilné prostredie na spúšťanie aplikácií |
Cieľová skupina | Korporácie, enterprise riešenia, dlhodobé projekty | Vývojári, testovanie nových features | Programátori a vývojové tímy | Celá Java komunita (štandardizácia) | Koncoví používatelia a prostredia, kde sa aplikácie iba spúšťajú |
Riziko | Minimálne, dlhodobé fixy a bezpečnostné záplaty | Vyššie – možné odstránenie feature v ďalšej verzii | Žiadne extra riziko – viazané na konkrétnu verziu | Stabilita – definuje oficiálny základ Javy | Žiadne riziko – neobsahuje vývojové nástroje, iba runtime |
Príklady | Java 8, Java 11, Java 17, Java 21 | Java 9, 10, 12, 13, 14, 15, 16, 18… | JDK 11, JDK 16, JDK 24… | Java SE 9, SE 18, SE 25… | JRE 8, JRE 11, JRE 17… |
LTS verzie sú voľbou pre stabilitu a dlhodobú podporu. Firmy ich nasadzujú do produkcie, pretože dostávajú bezpečnostné záplaty a opravy niekoľko rokov.
Naopak, non-LTS verzie sú krátkodobé – vychádzajú každého pol roka a prinášajú rýchlejšie inovácie. Vývojári ich používajú na testovanie nových funkcií, no v produkcii sa väčšinou prechádza na ďalšie LTS.
JDK (Java Development Kit) je balík nástrojov, ktorý dostaneš s každou verziou Javy a slúži priamo vývojárom.
Java SE (Standard Edition) zas definuje základný štandard jazyka a API, na ktorom je postavený celý ekosystém.
Ak teda riešiš, ktorú verziu si vybrať:
Migrácia na novú verziu Javy nie je len o stiahnutí najnovšieho JDK. Je to proces, ktorý si vyžaduje plánovanie, testovanie a prispôsobenie existujúceho kódu.
Najčastejšie problémy pri migrácii:
Najbezpečnejšie je migrovať vždy na najnovšiu LTS verziu, otestovať aplikáciu a následne ju nasadiť do produkcie. Non-LTS verzie sú vhodné na experimenty, ale nie na dlhodobý chod aplikácií.ň
Ďalej si rozoberieme zmeny a vylepšenia v jednotlivých Java verziách podrobne.
Java 24 priniesla novú verziu JDK 24 so symbolickými 24 vylepšeniami jazyka, API, výkonu platformy, stability a bezpečnosti. Takto novinkami prekypujúce vydanie sme tu už dávno nemali. Tak nestrácajme čas a poďme si ich postupne predstaviť.
Novú verziu Java 24 priniesla spoločnosť Oracle 18. marca 2025. Kompletný vývojársky balík Java Development Kit 24 (JDK 24) pre túto verziu Javy prináša množstvo vylepšení pre programátorov.
Java 24 vrátane poznámok k vydaniu je k dispozícii na stiahnutie na tomto linku
Podobne ako predchádzajúce verzie Javy je Java 24 kolektívnym snažením mnohých prispievateľov – či už jednotlivcov alebo organizácií OpenJDK komunity. Zatiaľ čo počet zmien vo vydaniach JDK zostáva už niekoľko rokov približne rovnaký, v rámci posledného šesťmesačného cyklu sa tempo, akým sa nové funkcie a vylepšenia dostávajú do produkcie, výrazne zrýchlilo.
Zmeny v JDK 24 siahajú od významných nových funkcií cez malé vylepšenia až po rutinnú údržbu, opravy chýb a vylepšenia dokumentácie. Každá zmena pre daný tiket je reprezentovaná samostatným komitom do repozitára JDK Bug System.
Vieš, že… …medzi verziami Java 11 až po Java 24 bolo vyriešených 31 187 problémov? 22 107 (cca. 70 %) bolo dokončenými ľuďmi pracujúcich pre Oracle, zatiaľ čo 9 080 (cca. 30 %) prispeli jednotliví vývojári pracujúci buď samostatne alebo pre iné organizácie. V Java 24 z 2 463 problémov JIRA označených ako opravené, 1 657 dokončil Oracle (cca. 67%), zatiaľ čo 806 (cca. 33%) prispeli iní členovia komunity Java.
JDK 24 prináša 24 vylepšení , ktoré sú dostatočne významné na to, aby dostali vlastné návrhy na vylepšenie JDK – JEP , vrátane 8 ukážok funkcií a 1 funkcie inkubátora.
JEP 488: Rozširuje pattern matching tak, aby umožnil typové vzory s primitívnymi typmi vo všetkých kontextoch, a zároveň dopĺňa operátory instanceof a switch o podporu všetkých primitívnych typov vrátane bezpečného testovania a konverzií. Tým sa dosahuje unifikovaný, výraznejší jazyk pri spracovaní hodnôt a typov bez ručného pretypovania či kontrol rozsahu.
JEP 492: Umožňuje vkladanie bežných príkazov pred explicitné volanie super(…) alebo this(…) v tele konštruktora, pričom tieto príkazy môžu inicializovať polia a overiť argumenty, ale nesmú používať ešte nehotový objekt. Toto prináša prirodzenejší model validácie a prípravy dát pred vytvorením nadtriedy, čím sa zjednodušuje a spriehľadňuje kód konštruktorov.
JEP 494: Zavádza novú syntaktickú konštrukciu import module M;, ktorá cez jeden príkaz naimportuje všetky verejné top‑level triedy a rozhrania exportované modulom M (vrátane tranzitívnych závislostí). Tým sa eliminuje potreba mnohých import … .* príkazov a výrazne sa zjednodušuje opätovné využívanie modulárnych knižníc vo všetkých typoch projektov.
JEP 495: Prináša jednoduchší spôsob ako vytvárať malé Java programy: umožňuje písať spustiteľné programy bez vlastnej triedy a bez boilerplate public static void main(String[] args), podporuje inštančné main metódy (bez parametra aj modifikátorov) a jednoduché zdrojové súbory s automatickými importmi základných metód konzolového I/O a celého modulu java.base. Toto znižuje krivku učenia a zároveň zachováva možnosť plynulého prechodu na plnohodnotné programy.
JEP 484: Zavádza štandardizované API (java.lang.classfile) na parsovanie, generovanie a transformáciu .class súborov podľa formátu definovaného JVM špecifikáciou. Cieľom je nahradiť interné ASM knižnice jednotným, udržiavateľným a plne špecifikovaným rozhraním.
JEP 485: Rozširuje Stream API o možnosť definovať vlastné intermediate operácie (Stream::gather), ktoré umožňujú prispôsobené transformácie prvkov prúdu (one‑to‑one, one‑to‑many, many‑to‑many) s plnou podporou paralelizácie a bez potreby externých zberačov dát. Toto zjednodušuje expresívne a efektívne spracovanie dátových potrubí.
JEP 487: Predstavuje nový typ ScopedValue na zdieľanie nemenných (immutable) dát v rámci metódy, jej volaní a novovytvorených vlákien ako jednoduchšiu a výkonnejšiu alternatívu k ThreadLocal. Má nižšie priestorové aj časové nároky a hodí sa najmä pri využití virtuálnych vlákien.
JEP 489: Prináša platformovo‑neutrálne, vysoko výkonné rozhranie na vyjadrovanie vektorových výpočtov, ktoré sa za behu mapuje na natívne SIMD inštrukcie na podporovaných CPU. Výsledkom je, že vývojári môžu dosiahnuť lepší výkon ako cez ekvivalentné skalárne výpočty, ktoré sa čoraz častejšie používajú v AI výpočtoch.
JEP 499: Umožňuje spravovať skupiny súvisiacich úloh ako jednu jednotku práce cez nové API, čo zjednodušuje manažment chýb, zrušenie a pozorovateľnosť v konkurenčných aplikáciách. Táto koncepcia pomáha predchádzať „thread leakom“ a zlepšuje spoľahlivosť a čitateľnosť kódu.
JEP 478: Zavádza nové API javax.crypto.KDF na generovanie a rozširovanie kryptografických kľúčov pomocou štandardných KDF algoritmov ako HKDF (RFC 5869) a Argon2 (RFC 9106). Umožňuje aplikáciám ľahko odvodiť viacero kľúčov z jedného vstupného tajného kľúča (napr. v Hybrid Public Key Encryption alebo TLS 1.3) a poskytuje rozhranie na rozšíriteľnosť pre ďalšie KDF implementácie.
JEP 496: Dodáva implementáciu ML‑KEM, kvantovo odolnej KEM schémy štandardizovanej v NIST FIPS 203. Rozširuje KeyPairGenerator, KEM a KeyFactory o parameter sety ML‑KEM‑512, ML‑KEM‑768 a ML‑KEM‑1024, čím aplikáciám umožňuje bezpečne vymieňať symetrické kľúče odolné voči útokom budúcich kvantových počítačov.
JEP 497: Pridáva podporu ML‑DSA, kvantovo odolného algoritmu pre digitálne podpisy (FIPS 204). Implementuje KeyPairGenerator, Signature a KeyFactory pre tri parameter sety ML‑DSA‑44, ML‑DSA‑65 a ML‑DSA‑87, čo umožňuje autentifikáciu a overovanie integrity dát s odolnosťou voči kvantovým útokom.
JEP 493: Umožňuje cez nástroj jlink vytvárať runtime obrazy bez JMOD súborov, znižuje veľkosť inštalácie JDK až o 25 % a uľahčuje správu modulov v cloudových a kontajnerových prostrediach.
JEP 450: Znižuje veľkosť hlavičiek Java objektov z 96 –128 bitov na 64 bitov na 64‑bitových platformách, čo šetrí pamäť a zlepšuje lokalitu dát v cache. Aktivuje sa VM voľbami:
-XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders.
JEP 475: Presúva expanziu pamäťových bariér v G1 GC z ranných fází C2 kompilácie do neskorších, čím znižuje dobu kompilácie a zjednodušuje implementáciu, zatiaľ čo zachováva výkon generovaného kódu.
JEP 483: Zlepšuje štart JVM tým, že počas jedného spustenia uloží načítané a pre-linkované triedy do vyrovnávacej pamäte, ktorú HotSpot použije pri ďalšom štarte, čím sa skráti počiatočný čas spustenia.
JEP 490: Odstraňuje Non-Generational režim pre Z Garbage Collector (-XX:+ZGenerational), čím sa znižuje zložitosť kódu a primárnym sa stáva generational ZGC, vhodnejší pre väčšinu nasadení.
JEP 491: Zlepšuje škálovateľnosť synchronizovaných blokov pri použití virtuálnych vlákien tak, že pri zablokovaní nedrží platformové vlákno, ale ho uvoľní pre iné vlákna, čím sa zvyšuje počet obsluhovaných virtuálnych vlákien.
JEP 404: Zavádza experimentálny generational režim do Shenandoah GC, ktorý zlepšuje udržateľnú priepustnosť, odolnosť pri náhlych zaťaženiach a využitie pamäte rozdelením heapu na generačné oblasti, bez narušenia existujúceho ne‑generational módu. Cieľom je pripraviť generational Shenandoah ako predvolený režim v budúcich vydaniach.
JEP 472: Spustilo sa vydávanie runtime varovaní pri volaniach JNI a Foreign Function & Memory API, aby sa vývojári pripravili na nadchádzajúce vydanie, ktoré zníži alebo zakáže implicitnú podporu natívnej interakcie. Zachováva sa možnosť JNI, avšak s jasnými upozorneniami a jednotným správaním pred prechodom na prísnejšie obmedzenia.
JEP 479: Odstraňuje zdrojový kód a build‑script pre Windows 32‑bit x86 port (deprecated v JDK 21), čím sa odstránia všetky špecifické cesty a testy pre tento port. Po ukončení podpory Windows 10 na 32 bit (EOL október 2025) sa zjednoduší infraštruktúra buildovania a testovania JDK.
JEP 486: Špecifikácia platformy sa upravuje tak, že Security Manager už nebude možné nijako povoliť a jeho API nebude nijako odkazované v kóde, čím sa odstráni zastaralý a nákladný mechanizmus zabezpečenia, ktorý bol deprecated už v Java 17.
JEP 498: Pri prvom zavolaní ktoréhokoľvek z memory‑access API v sun.misc.Unsafe JVM vypíše runtime varovanie. Tieto metódy boli deprecated v JDK 23 a majú byť nahradené štandardnými šifrovacími a pamäťovými rozhraniami.
JEP 501: Oznamuje deprecation posledného 32‑bit x86 portu (Linux), čím pripravuje jeho úplné odstránenie v JDK 25. Po odstránení zostane pre platformy s 32‑bit architektúrou len agnostic Zero port.
Zdroje:
Java ako programovací jazyk pokračuje v dominancii pre dnešné technologické trendy. Aj vydanie Java 23 s množstvom vylepšení ukazuje, že premyslené plánovanie a dopredu stanovené a dodržané termíny prispievajú k tomu, že sa Java so svojim ekosystémom stala pre množstvo vývojárov na celom svete preferovanou platformou pre moderný vývoj softvéru.
Prehľad vylepšení jazyka Java (JEPs) za posledných 10 rokov
Java 23 vyšla 17. septembra 2024. Podobne ako s predchádzajúcimi vydaniami Javy, Java 23 je kolektívnym výsledkom prispievateľov a to, či už jednotlivcov, alebo organizácií OpenJDK komunity.
Množstvo zmien v JDK aktualizáciách zostáva za posledných pár rokov do značnej miery konštantná (v priemere okolo 10), ale to je dané pravidelnými šesťmesačnými vydaniami, ktoré aj napriek relatívne krátkemu času na prípravu siahajú od nových vlastností jazyka, cez malé vylepšenia existujúcej funkcionality, až po opravy chýb a aktualizácie dokumentácie.
Každá zmena pre daný tiket je reprezentovaná samostatným komitom do repozitára JDK Bug System. Zaujímavosťou je, že medzi verziami Java 11 až po Java 23 bolo 28 724 vyriešených problémov, pričom 20 450 (cca. 71%) bolo dokončenými ľuďmi pracujúcich pre Oracle, zatiaľ čo 8 274 (cca. 29%) prispeli jednotliví Java programátori pracujúci buď samostatne alebo pre iné organizácie.
Táto zmena (JEP 455) zruší niekoľko obmedzení, ktoré existujú pri používaní primitívnych typov pri porovnávaní vzorov. Kód, ktorý spracováva primitívne typy a typy objektov, je možné zjednodušiť, keď nie sú potrebné žiadne špeciálne úpravy a obidva typy možno spracovať rovnakým spôsobom. Umožnenie inštancii instanceof akceptovať primitíva ďalej redukuje kód pre bežné prípady, pretože teraz dokáže automaticky spracovať podmienené pretypovania – kde je potrebné skontrolovať hodnotu, aby sa zabezpečilo, že je platná pre cieľový typ.
JEP 476 – umožňuje vývojárom importovať všetky balíky exportované modulom pomocou jediného príkazu. To zjednodušuje opätovné použitie modulárnych knižníc bez toho, aby sa vyžadovalo, aby bol importovaný kód v samotnom module. Vďaka tejto funkcii môžu začiatočníci používať knižnice tretích strán a základné triedy Java bez toho, aby sa museli učiť, kde sa nachádzajú v hierarchii balíkov.
JEP 477 – Toto umožní začiatočníkom písať svoje prvé programy Java bez toho, aby museli najprv porozumieť funkciám určeným pre väčšie a komplexnejšie programy. Jednoduché programy môžu používať zjednodušené deklarácie a v prípade potreby sa bez problémov rozšíria o pokročilejšie funkcie podľa potreby. Skúsení vývojári si tiež môžu vychutnať stručné písanie malých programov.
JEP 482 – Umožnením, aby sa niektoré príkazy v konštruktoroch objavili pred explicitným vyvolaním konštruktora, teda super(…) alebo this(…), vývojári získajú slobodu lepšie vyjadrovať správanie konštruktorov. Prirodzenejšie umiestnenie logiky, ktoré táto vlastnosť poskytuje, odstraňuje potrebu začleniť časť kontrolnej a inicializačnej logiky do pomocných statických metód a pomocných medzikonštruktorov. Napríklad, ak môže konštruktor overiť prijaté argumenty pred vyvolaním konštruktora supertriedy, rýchlo zlyhá a vyhne sa tak zbytočnej inštancii supertriedy, keď sú argumenty neplatné.
JEP 466 – tento JEP navrhuje API na analýzu, generovanie a transformáciu súborov triedy Java , ktoré sleduje formát definovaný špecifikáciou Java Virtual Machine . Ak bude toto API dodané ako súčasť každého vydania, zmierni sa napätie spôsobené tým, že Java prijala šesťmesačný cyklus medzi vydaniami a frameworkov, ktoré manipulujú so súbormi tried, ktoré sa aktualizujú pri každom vydaní za účelom rýchleho prijatia nových verzií. Keď sa táto funkcionalita dokončí, mala by oslobodiť samotný JDK od jeho závislosti od knižnice ASM tretej strany.
JEP 469 – umožňuje vývojárom Java vyjadrovať vektorové výpočty, ktoré sa spoľahlivo kompilujú za behu do optimálnych vektorových inštrukcií na podporovaných architektúrach CPU, čím dosahujú výkon lepší ako ekvivalentné skalárne výpočty. Neexistujú žiadne rozdiely oproti 7. inkubácii tejto funkcie v JDK 22. Očakáva sa, že toto API sa bude naďalej vracať ako inkubačné, prinajlepšom len s malými zmenami, kým nebudú dostupné potrebné funkcie z projektu Valhalla.
JEP 473 – vylepšuje rozhranie Stream API na podporu vlastných prechodných operácií. To umožní prúdovým kanálom transformovať údaje spôsobmi, ktoré nie sú ľahko dosiahnuteľné s existujúcimi vstavanými prechodnými operáciami. Zberače prúdu poskytujú takú flexibilitu pre medziľahlé operácie, akú umožňujú zberače pre terminálne operácie. Toto vylepšenie predstavuje päť vstavaných zberačov.
JEP 480 – štruktúrovaná súbežnosť umožňuje vývojárom zaobchádzať so skupinami súvisiacich úloh spustených v rôznych vláknach ako s jednou jednotkou práce, čím sa zjednodušuje spracovanie chýb a ich zrušenie, zvyšuje sa spoľahlivosť a zlepšuje sa pozorovateľnosť. Toto API podporuje štýl súbežného programovania, ktorý môže eliminovať bežné riziká vyplývajúce zo zrušenia a vypnutia, ako sú úniky vlákien a oneskorenia pri zrušení.
JEP 481 – umožní metóde zdieľať nemenné údaje so svojimi volajúcimi v rámci vlákna aj s podriadenými vláknami. Použitie hodnôt rozsahu sa dajú ľahšie zdôvodniť ako premenných lokálneho vlákna. Majú tiež nižšie priestorové a časové náklady, najmä ak sa používajú spolu s virtuálnymi vláknami (JEP 444) a štruktúrovanou súbežnosťou (JEP 480).
JEP 474 – prepne predvolený režim Z Garbage Collector (ZGC) na generačný režim. Spätná väzba z používania generácie ZGC, predstavenej v JDK 21, ako aj interné testovanie potvrdili, že vo väčšine prípadov použitia funguje výrazne lepšie ako negeneračný ZGC. Tento JEP tiež zavrhuje negeneračný režim ZGC so zámerom odstrániť ho v budúcom vydaní JDK.
JEP 467 – umožňuje použitie Markdown namiesto iba kombinácie HTML a Javadoc @-tagov na písanie komentárov v Javadoc dokumentácii. Nový formát uľahčuje čítanie a pochopenie dokumentácie v zdrojovej forme.
JEP 471 – zavedením rozhrania API pre cudzie funkcie a pamäť (JEP 454) v JDK 22 bolo poskytnuté podporované rozhranie API na efektívny prístup k externej (cudzej) pamäti. Preto bolo oznámené budúce odstránenie metód v sun.misc.unsafe používaných na cudzí prístup k pamäti.
Tu nájdeš poznámky ku vydaniu Java JDK 23.
Java 23 prináša množstvo vylepšení, ktoré zjednodušujú prácu vývojárov a umožňujú efektívnejšie využívanie platformy. Nové funkcie, ako vylepšenia jazyka, výkonu či nástrojov, opäť potvrdzujú, že Java je pre mnohých vývojárov preferovanou voľbou.
Blíži sa vydanie novej verzie Java JDK a my na našom blogu sme sa rozhodli bližšie pozrieť na novú funkcionalitu jazyka. Cieľový dátum vydania je naplánovaný na 19. septembra 2023. Je však možné si už túto verziu stiahnuť v predbežnom prístupe (Early Access) a začať prvé experimenty.
Java 21 (po Jave 17) je opäť verzia s dlhodobou podporou (LTS), čo znamená, že Oracle poskytne bezplatné aktualizácie aspoň po dobu piatich rokov, až do septembra 2028, a rozšírenú platenú podporu až do septembra 2031.
Virtuálne vlákna (virtual threads) sú ľahké vlákna, ktoré značne zjednodušujú písanie, údržbu a sledovanie vysoko výkonných súbežných aplikácií. Zahŕňajú možnosť škálovania serverových aplikácií napísaných vo forme vlákno-na-požiadanie efektívnym využitím hardvéru, možnosť jednoduchej migrácie existujúceho kódu, ktorý používa API lang.Thread, na virtuálne vlákna s minimálnymi zmenami a možnosť jednoduchého ladenia a profilovania virtuálnych vlákien pomocou súčasných nástrojov JDK.
Virtuálne vlákna boli predstavené v JDK 20 a JDK 19 a budú dokončené v JDK 21. S JDK 21 virtuálne vlákna teraz podporujú lokálne premenné vlákna počas celej doby behu a nie je dovolené vytvárať virtuálne vlákna bez týchto premenných. Zaručená podpora lokálnych premenných vlákna tak zabezpečí, že veľa existujúcich knižníc bude môcť byť použitých s virtuálnymi vláknami bez zmeny.
Sekvenčné kolekcie, resp. kolekcie s usporiadaním sú ďalšou zaujímavou novinkou a JDK 21 prináša návrh kolekcií s usporiadaním a zavádza rozhrania pre kolekcie s definovaným usporiadaním. Každá kolekcia má jasne definované prvý, druhý a tak ďalej, až po posledný prvok. Sú poskytnuté jednotné API pre prijímanie prvých a posledných prvkov a pre spracovanie prvkov v opačnom poradí. Motiváciou pre tento návrh je skutočnosť, že Java collection framework nemá typ kolekcie, ktorý by reprezentoval postupnosť prvkov s definovaným usporiadaním. Tiež mu chýba jednotná množina operácií, ktoré sa uplatňujú na tieto kolekcie. Tieto medzery boli problémom a zdrojom sťažností. Návrh požaduje definovanie rozhraní pre sekvencie kolekcií, množín a máp a ich zahrnutie do existujúcej hierarchie typov kolekcií. Všetky tieto nové metódy majú preddefinované implementácie.
Vzory záznamu umožňujú dekonštruovať hodnoty záznamov. Vzorové záznamy a vzorové typy možno vnárať, čo umožňuje silné, deklaratívne a kombinovateľné vyhľadávanie a spracovanie dát. Ciele návrhu zahŕňajú rozšírenie vzorového porovnávania na deštrukciu inštancií tried záznamov a pridanie vnorených vzorov, čím sa umožní kompozícia dátových dotazov. Táto funkcia sa vyvíjala súbežne s porovnávaním vzorov pre switch výrazy.
Táto funkcia umožňuje výrazu/príkazu switch testovať sa voči viacerým vzorom, každý s konkrétnou akciou, čo umožňuje bezpečné a stručné vyjadrenie zložitých dátových dotazov. Táto funkcia bola pôvodne navrhnutá v JDK 17, upravovaná v ďalších verziách a v JDK 21 by mala byť dokončená a upravená na základe spätnej väzby a skúseností Java vývojárov. Hlavné zmeny oproti predchádzajúcim verziám JEP zahŕňajú odstránenie zátvoriek vo vzoroch a umožnenie kvalifikovaných enumeračných konštánt, ďalej zvýšenie bezpečnosti výrazov a príkazov switch vyžadovaním toho, aby sa pokrývali všetky možné vstupné hodnoty. Ďalším cieľom je zabezpečiť, aby existujúce switch zápisy zostali funkčné bez zmien a vykonávali sa s rovnakou sémantikou.
Toto je funkcia vo forme ukážky v JDK 21, ktorá dopĺňa existujúce reťazcové literály a textové bloky v Jave tým, že spája takýto text s vloženými výrazmi a procesormi na vytvorenie špecializovaných výsledkov. Tento jazykový prvok a API má za cieľ zjednodušiť písanie Java programov tým, že umožňuje jednoducho vyjadriť reťazce, ktoré obsahujú hodnoty vypočítané počas behu programu. Sľubuje zlepšenie čitateľnosti výrazov, zvýšenie bezpečnosti programu, zachovanie flexibility a zjednodušenie používania API, ktoré prijímajú reťazce napísané v iných jazykoch ako je Java. Funkcia tiež umožňuje vývoj nereťazcových výrazov vytvorených kombináciou textových literálov a vložených výrazov.
Táto funkcia zlepšuje čitateľnosť a údržbu kódu tým, že umožňuje vytvárať vzory bez uvádzania mena alebo typu komponentu. Nepomenované premenné môžu byť inicializované, ale nie sú použité. Cieľom je eliminovať zbytočné vnorené vzory a identifikovať nepoužívané premenné.
Táto funkcia je zameraná na zjednodušenie písania prvých Java programov, kde študenti nemusia hneď rozumieť funkciám jazyka určeným pre komplexnejšie projekty. Umožňuje vytvárať jednoduché programy a postupne ich rozširovať o pokročilejšie funkcie.
Štruktúrovaná súbežnosť zjednodušuje programovanie v súbežnom prostredí pomocou API, ktoré spravuje skupiny súvisiacich úloh ako jednotky práce. Týmto sa zlepšuje správa chýb, čo zvyšuje spoľahlivosť a pozorovateľnosť. Táto funkcia, ktorá bola predtým testovaná v JDK 20 a JDK 19, teraz dostáva podporu ako ukážkové API v balíku util.concurrent.
Preview verzia tejto funkcie, umožňuje zdieľanie nemenných dát medzi vláknami a komponentami. Scoped hodnoty sú preferované pred vláknovými lokálnymi premennými, najmä pri použití veľkého počtu virtuálnych vlákien. Táto funkcia zlepšuje čitateľnosť a robustnosť kódu.
Zákaz dynamického načítavania agentov – táto zmena je zameraná na vylepšenie integrity JVM tým, že upozorní na načítanie agentov dynamicky počas behu aplikácie. Cieľom je zlepšiť rovnováhu medzi servisnými zmenami a integritou kódu a zabezpečiť, aby väčšina nástrojov nebola ovplyvnená touto zmenou.
Táto funkcia umožňuje používanie algoritmov pre zabezpečenie symetrických kľúčov pomocou verejnej kryptografie. Cieľom je umožniť aplikáciám používať algoritmy ako RSA Key Encapsulation Mechanism (RSA-KEM) a Elliptic Curve Integrated Encryption Scheme (ECIES) v rôznych protokoloch a kryptografických schémach.
Táto funkcia je zameraná na zlepšenie výkonu aplikácií pomocou oddelených generácií pre mladé a staré objekty. Generational ZGC umožňuje efektívnejšie zhromažďovanie mladých objektov a prináša nižšiu spotrebu pamäte a nižšiu záťaž na garbage collection (zber nepotrebnej alokovanej pamäte).
Umožňuje interoperabilitu Java programov s kódom a dátami mimo Java-runtime. Umožňuje volanie externých knižníc a bezpečný prístup k pamäti, čím nahradzuje JNI (Java Native Interface).
Toto API umožňuje vykonávať výpočty vektorovo, čo vedie k lepšiemu výkonu oproti skalárnym výpočtom. Cieľom je poskytnúť jednoduché a spoľahlivé riešenie pre vektorové výpočty na podporovaných architektúrach.
Táto zmena sa zameriava na odstránenie 32-bitového portu pre Windows x86 v budúcom vydaní. Windows 10, posledný operačný systém od Microsoftu s podporou 32-bitového režimu, končí svoj životný cyklus v októbri 2025.
Okrem týchto funkcií sa v JDK 21 pripravuje aj zmena v priradzovaní názvov sieťovým rozhraniam v systéme Windows. Taktiež je plánovaná experimentálna funkcia „compact object headers“, ktorá má znížiť veľkosť hlavičiek objektov v JVM a tak zmenšiť veľkosť pamäte.
Ak ťa nové vlastnosti Java JDK 21 zaujali a chcel by si sa dozvedieť o nich viac, odporúčame navštíviť oficiálnu webovú stránku OpenJDK.
Spoločnosť Oracle oznámila 21. marca 2023 dostupnosť svojej najnovšej verzie najpopulárnejšieho programovacieho jazyka a vývojovej platformy na svete. V tomto článku sa budeme zameriavať na niektoré z najvýznamnejších noviniek.
Java SE 20 (Oracle JDK 20) prináša tisíce vylepšení v oblasti výkonu, stability a bezpečnosti vrátane vylepšení platformy, ktoré pomôžu vývojárom zvýšiť produktivitu a podporiť inovácie a rast vo svojich organizáciách. Je to už viac ako 25 rokov, čo Java umožňuje vývojárom navrhovať a budovať nové generácie robustných, škálovateľných a bezpečných aplikácií.
Oracle JDK 20 nie je vydanie s dlhodobou podporou (LTS – long-term support), preto bude dostávať aktualizácie iba dovtedy, kým ho o šesť mesiacov nenahradí JDK 21.
Posledným vydaním LTS Java tak stále ostáva Oracle JDK 17 (vydané 14. septembra 2021). Avšak Oracle oznámil plány na skrátenie času medzi vydaniami LTS z troch rokov na dva roky, takže JDK 21 je naplánované ako ďalšie LTS v septembri 2023.
Množstvo zmien v priebehu času vo vydaniach JDK sa veľmi nezmenilo, ale pod šesťmesačným tlakom vydávania nových verzií sa tempo dodávania novej funkcionality a vylepšení pripravených do produkcie prudko zvýšilo. Namiesto toho, aby firma Oracle robila desaťtisíce opráv a dodávala takmer sto JEP (návrhov na zlepšenie JDK) každých pár rokov, ako to robili kedysi s hlavnými vydaniami, sú vylepšenia dodávané v skromnejších vydaniach na viac predvídateľnejšom šesťmesačnom harmonograme. Zmeny sa pohybujú od významnej novej funkcionality, cez malé vylepšenia až po rutinnú údržbu, opravy chýb a zlepšovanie dokumentácie. Každá zmena je reprezentovaná samostatným komitom (commit) a issue v systéme chýb JDK.
Java je budovaná nielen Oracle, ale aj spoločným úsilím rozsiahlej globálnej komunity členov po celkom svete? Tak napríklad v Jave 20, zo všetkých 2314 JIRA issues, 1595 (69%) vyriešilo Oracle a 719 (31%) boli príspevkami ostatných členov Java komunity.
Java 20 JDK obsahuje sedem JEPs návrhov na zlepšenie JDK (JDK Enhancement Proposals), ktoré majú za cieľ zvýšiť produktivitu vývojárov, zlepšiť jazyk Java a zvýšiť výkon, stabilitu a bezpečnosť platformy. Tieto funkcie zahŕňajú virtuálne vlákna, návrh vektorového API, štruktúrovanú súbežnosť, ohraničené hodnoty, API pre cudzie funkcie a pamäť, vzory záznamov a zhodovanie vzorov pre príkazy a výrazy switch.
Virtuálne vlákna sú ľahké vlákna, ktoré znižujú námahu pri písaní, údržbe a ladení vysokovýkonných súbežných aplikácií. Sú to inštancie triedy java.lang.Thread, ale nie sú viazané na konkrétne vlákno operačného systému. Keď kód bežiaci vo virtuálnom vlákne volá blokujúcu operáciu vstupu/výstupu, Java Runtime suspenduje virtuálne vlákno, až kým ho nemôže obnoviť. Operačné vlákno spojené so suspendovaným virtuálnym vláknom je teraz voľné na vykonávanie operácií pre iné virtuálne vlákna.
Virtuálne vlákna sú vhodné na spustenie úloh, ktoré trávia väčšinu času blokovaním, často čakajúc na dokončenie operácií vstupu/výstupu. Nie sú však určené pre dlhodobé operácie náročné na procesor.
Návrh vektorového API je nová funkcia v Java 20 JDK, ktorá zavádza API na vyjadrenie vektorových výpočtov, ktoré sa spoľahlivo kompilujú na optimálne vektorové inštrukcie na podporovaných architektúrach CPU a dosahujú tak výkon nadradený nad ekvivalentnými skalárnymi výpočtami.
Cieľom je poskytnúť jasné a stručné API, ktoré by bolo schopné vyjadriť širokú škálu vektorových výpočtov pozostávajúcich zo sekvencií vektorových operácií zložených do slučiek a možno aj s riadením toku. Malo by byť možné vyjadriť výpočet, ktorý je generický vo vzťahu k veľkosti vektora alebo počtu dráh na vektor, čím umožní prenositeľnosť takýchto výpočtov naprieč hardvérom podporujúcim rôzne veľkosti vektorov.
Ide o novú funkciu v Java SE 20 JDK, ktorá poskytuje API na zjednodušenie programovania viacvláknových aplikácií a spracovanie viacerých úloh bežiacich v rôznych vláknach ako jednej jednotky práce. Ošetrenie chýb a zrušenie vlákien sú zjednodušené, čo zlepšuje spoľahlivosť a zvyšuje pozorovateľnosť.
Jedinou zmenou oproti konceptu v JDK 19 je, že trieda StructuredTaskScope bola aktualizovaná tak, aby podporovala dedičnosť ohraničených hodnôt vláknami vytvorenými v rozsahu úloh.
Ohraničené hodnoty sú novinkou v Java 20 JDK, ktorá umožňuje vývojárom ukladať a zdieľať nemenné údaje vo vnútri a medzi vláknami. Toto nové API je zavedené v Java 20 JDK ako inkubátorská funkcia navrhnutá v JEP 439.
V Java 20 JDK je zavedená nová trieda jdk.incubator.concurrent.ScopedValue<T>, ktorá reprezentuje ohraničenú hodnotu ako pár kľúč-hodnota. V podstate predstavuje ohraničená hodnota hodnotu, ktorá sa nastaví iba raz a je dostupná na čítanie po obmedzenú dobu vo vlákne. Ohraničené hodnoty poskytujú zdieľanie údajov bez použitia argumentov metódy.
Táto nová funkcia v Java 20 JDK umožňuje programom Java spolupracovať s kódom a údajmi mimo Java runtime. Efektívnym volaním cudzích funkcií (kód mimo Java Virtual Machine [JVM]) a bezpečným prístupom k cudzej pamäti (pamäť nie je spravovaná JVM) táto funkcia umožňuje programom Java volať natívne knižnice a spracovávať natívne údaje bez potreby Java Native Interface. To zvyšuje jednoduchosť použitia, výkon a bezpečnosť.
Toto vylepšenie rozširuje jazyk Java tým, že umožňuje používateľom vnoriť vzory záznamov a typové vzory na vytvorenie silnej, deklaratívnej a kompozitnej formy navigácie a spracovania údajov. To pomáha zvyšovať produktivitu vývojárov tým, že im umožňuje rozšíriť zhodovanie vzorov tak, aby umožňovali sofistikovanejšie dopyty na údaje.
Umožňuje vývojárom používať vzory v podmienkach switch. Oproti používaniu konštánt to poskytuje vyššiu flexibilitu a vyjadrovaciu silu.
Nové vydanie Java SE 20 JDK prináša okrem opravy chýb aj sedem návrhov na zlepšenie JDK na zvýšenie produktivity vývojárov, zlepšenie jazyka Java a zvýšenie výkonu, stability a bezpečnosti platformy.
Môžete si ju stiahnuť tu: Java SE 20 JDK download.
Až do marca 2022 je najnovšou verziou Java 17, ktorá priniesla novú renderovaciu pipeline pre systémy macOS, podporu portu pre najnovší čip Apple M1 a podporu sealed classes. Nechýbajú ani jazykové vylepšenia a odstránenie komplikácie ahead-of-time a just-in-time.
Zdroj: Java SE 17
Verzia 16 vyšla v marci 2021 a priniesla jednu významnú zmenu, ktorou bola migrácia OpenJDK do Gitu. Zdrojové kódy OpenJDK boli premigrované z Mercurial do Gitu. Dôvodom bola veľkosť súborov metadát, lepšie nástroje a hostovanie.
Zdroj: Java SE 16
Java SE 15 vyšla v septembri 2020 a priniesla so sebou tri hlavné aktualizácie:
Textové bloky, ktoré boli zavedené ako preview v prostredí Java 13, sa stali jazykovým štandardom.
Modifikátory prístupu public, protected a private poskytujú veľmi hrubú kontrolu. Pomocou kľúčových slov sealed, non-sealed a permits sa programátor dokáže pohrať s hierarchiou dedičnosti. Cieľom sealed tried je umožniť jednotlivým triedam deklarovať, ktoré typy sa môžu použiť ako podtypy. To platí aj pre rozhrania a určovanie, ktoré typy ich môžu implementovať.
V tomto príklade sme deklarovali abstraktnú triedu s názvom Person. Zároveň sme špecifikovali, že jediné triedy, ktoré ju môžu rozšíriť, sú Employee a Manager. Rozšírenie sealed triedy sa deje rovnako ako dnes v Jave pomocou kľúčového slova extends:
Každá trieda, ktorá rozširuje sealed triedu, musí byť sama vyhlásená za sealed, non-sealed alebo final. To zaisťuje, že hierarchia tried zostáva konečná a kompilátor ju pozná.
Cieľom skrytých tried je umožniť vytvárať triedy, ktoré nie sú viditeľné. Znamená to, že ich nemôžu spájať iné triedy ani ich nie je možné objaviť pomocou reflexie. Triedy, ako sú tieto, majú zvyčajne krátky životný cyklus, preto sú navrhnuté tak, aby boli hlavne efektívne. Užitočné sú najmä pre vývojárov pracujúcich s JVM.
Zdroj: Java SE 15
V marci 2020 vyšla verzia Java SE 14 a priniesla až štyri významnejšie vylepšenia:
Výraz switch, ktorý bol zavedený ako preview v Jave 12 a bol vylepšený vo verzii 13, sa stal jazykovým štandardom.
NullPointerException nemal v minulosti príliš veľkú výpovednú hodnotu. Dôvod bol ten, že sa prostredníctvom neho dalo zistiť len to, že určitá hodnota bola v danom súbore nulová. V novej verzii je však všetko inak. Funkcia sa rozšírila a programátori sa konečne dozvedia, ktorá premenná spôsobila túto výnimku.
Záznamy boli zavedené na zníženie opakovaného štandardného kódu v dátových modeloch POJO. Zjednodušujú každodenný vývoj, zvyšujú efektivitu a výrazne minimalizujú riziko ľudskej chyby. Napríklad, dátový model pre používateľa s ID a heslom možno jednoducho definovať ako:
V tomto prípade sa využilo aj nové kľúčové slovo record, ktoré automaticky pridáva metódy konštruktora, getters, equals, hashCode a toString.
Verzia 14 predstavila porovnávanie vzorov s cieľom zjednodušiť kód. Bez novej funkcie by kód vyzeral takto:
Vďaka novej verzii Javy však kód vyzerá oveľa jednoduchšie a kratšie:
Zdroj: Java SE 14
Java 13 vyšla v septembri 2019. Aktualizácia prišla s dvomi hlavnými vylepšeniami:
Nová funkcia textových blokov umožnila vývojárom ľahšie čítať viacriadkové texty. Používa tri úvodzovky, podobne ako Python a Groovy.
Okrem toho sú k dispozícii všetky funkcie triedy String.
Java 13 vylepšuje switch výraz z verzie 12 o kľúčové slovo yield. Pomocou yield sa dajú navracať hodnoty z výrazu switch.
Zdroj: Java SE 13
Verzia 12 vyšla v marci 2019 a prišla len s jedným výrazným zlepšením. Bol ním alternatívny zápis switch. Nasledujúca ukážka porovnáva starý a nový zápis výrazu switch. Kód rozlišuje pracovné a víkendové dni.
Kód v novom zápise vyzerá oveľa čistejšie a kratšie. Nová forma switch taktiež odstraňuje potrebu kľúčových slov break. Znamená to, že keď kód nájde prvú zhodu, prestane pracovať. Ďalším rozdielom je, že premennej sa môže priamo priradiť hodnota z príkazu switch.
Zdroj: Java SE 12
Java 11 bola podľa ročného prieskumu spoločnosti Snyk najpoužívanejšou verziou v roku 2021. Využívalo ju až 61,5 % opýtaných. Iba 12 % aktualizovalo jazyk na najnovšiu verziu, ktorou bola v čase robenia prieskumu Java 15.
Zaujímavé boli tiež odpovede na otázku, aké sú dôvody toho, že ľudia neprešli na novšiu verziu. Väčšina sa zhodovala v tom, že nie je schopná alebo ochotná migrovať Javu každých 6 mesiacov. Iní, približne 51 %, tvrdia, že zmeny nepotrebujú, pretože ich súčasné prostredie funguje dobre.
K ďalším dôvodom, prečo účastníci prieskumu zostávajú pri starších verziách, patria:
Z prieskumu z roku 2020 zas vyplynulo, že stratégiou väčšiny vývojárov (55 %) je držať sa dlhodobých vydaní. Napriek tomu až 22 % respondentov uvádza, že sa plánuje rozhodnúť, či bude, alebo nebude inovovať. Chcú tak zistiť, či sú novozavedené funkcie dostatočne dôležité na odôvodnenie migrácie.
Java SE 11 vyšla šesť mesiacov po verzii číslo 10, čiže v septembri 2018. Priniesla dve zásadné zmeny:
Zásadnou zmenou v tejto verzii je, že programátor nepotrebuje explicitne kompilovať zdrojové súbory ava s príkazom javac.
Namiesto toho môže súbor spustiť priamo pomocou príkazu java.
Java 11 má podporu pre použitie syntaxe lokálnych premenných v parametroch lambda. Funkcia sa dá využiť na aplikovanie modifikátorov na lokálne premenné, napríklad na definovanie anotácie.
Zdroj: Java SE 11
Javu SE 10 vydala spoločnosť Oracle v marci 2018. Pre vývojárov priniesla dve dôležité zmeny:
Aby bola komunita Javy viac priateľská, Oracle začala propagovať binárne súbory OpenJDK ako primárne JDK do budúcnosti. Problém je však v tom, že ak chceš získať napríklad rozšírenú podporu pre staršie verzie Javy, musíš si za služby zaplatiť.
Premenná var nie je ničím novým, pretože existuje aj v iných programovacích jazykoch. Jej hlavnou výhodou je, že znižuje výrečnosť jazyka. V praxi to znamená, že pomocou nej sa vyhneš dlhým názvom objektov alebo písaniu rovnakých názvov dvakrát.
Programátori sa však môžu pýtať, aký je rozdiel medzi var a Object. Kľúčové slovo var znamená, že chceš, aby kompilátor sám zistil typ. Na druhej strane, pomocou Object pretypuješ svoju inštanciu objektu na typ Object. Znamená to, že aj keď môžeš použiť všeobecné metódy triedy Object, nemôžeš použiť svoje metódy špecifické pre danú triedu. Vytvorí to kompilačnú chybu.
Zdroj: Java SE 10
Java SE 9 vyšla v septembri 2017 a priniesla so sebou niekoľko zmien. Nie všetky ale boli významné a dôležité. Toto sú tri najdôležitejšie:
Najvýznamnejšou zmenou v prostredí Java 9 bol systém modularity, ktorý bol pomenovaný ako Jigsaw Project. Modul je skupina kódu charakteristická určitými črtami. Funkcia modularity rozdeľuje programovací jazyk na menšie modely, aby poskytoval:
Na vytvorenie nového modelu potrebuješ module-info.java súbor v tvojom src.main.java adresári. Vo vnútri môžeš definovať svoje požiadavky na modul.
Ďalšia funkcia Java 9 umožňuje písanie privátnych a statických metód v rozhraniach, aby sa zabránilo nadbytočnému kódu.
Spoločnosť Oracle vyvinula nový REPL nástroj nazvaný JShell. REPL znamená Read – Evaluate – Print – Loop. Ako jeho názov napovedá, slúži na spúšťanie príkazov, vytváranie premenných, tried, metód a umožňuje ich rýchlo testovať. Skvelý je na testovanie malých útržkov kódu, ktoré by inak vyžadovali vytvorenie novej triedy pomocou main metódy.
JShell možno nájsť v <JAVA_HOME> / bin zložke a môžeš ho spustiť zadaním jshell do príkazového riadku a okamžite začať písať kód.
Interaktívny Java jshell je dodávaný s históriou a automatickým dokončovaním. Poskytuje tiež funkcie, ako napríklad ukladanie a načítanie zo súborov a všetkých alebo z niektorých riadkov kódu:
Zdroj: Java SE 9
Súvisiace články