Údržba
Java 11 upratuje vo veľkom. Z JDK sa odstránili moduly Java EE, CORBA a Java FX. Tieto technológie budú do budúcnosti dostupné z Maven repozitárov. Odstránenie modulov enterprise Javy je logickým krokom, niekoho môže odstránenie Java FX prekvapiť. Nashorn JavaScript Engine sa označil za neodporúčaný; v budúcnosti sa z JDK odstráni. Dôvodom má byť prudký vývoj JavaScriptu a z toho vyplývajúca náročnosť údržby.
Java applety definitívne skončili. Applety boli jednou z najstarších dynamických webových technológií. Kedysi veľmi sľubne vyzerajúca technológia nikdy nedosiahla svoj potenciál a bola sprevádzaná neustálymi bezpečnostnými incidentmi. Spolu s appletmi skončila a Java Web Start technológia.
Vývojári chcú dosiahnuť čo najmenší core systém, aby mohla byť Java implementovaná na čo najviac zariadení. Chcú zároveň zrýchliť štart aplikácií. Dokonca sa zvažuje odstránenie Swingu. Tieto zmeny sú tiež poháňané modularizáciou Javy, ktorú naštartovala Java 9.
Testovanie noviniek
Na testovanie si môžeme stiahnuť OpenJDK alebo Oracle JDK.
IntelliJ IDEA 2018.2.4 už v sebe zahŕňa podporu Javy 11; je potrebné tam odškrtnúť súhlas s experimentálnou podporou.
~/bin/jdk-11/bin/java --version java 11 2018-09-25 Java(TM) SE Runtime Environment 18.9 (build 11+28) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Pre testovacie účely som použil Oracle JDK.
Štart jednosúborových programov
Medzi najzaujímavejšie novinky patrí možnosť spúšťania jednosúborových Java aplikácií. Súbory nie je potrebné pred spustením skompilovať pomocou nástroja javac
. Motívom tejto novinky boli zjednodušiť výučbový proces a tvorbu menších programov. Nielenže nám odpadá potreba zvlášť kompilovať súbor, ale tiež sa nám nezaprace priestor byte kód súbormi. Nie je tiež potrebné sa zaťažovať balíčkovými pravidlami.
package com.zetcode; public class SimpleEx { public static void main(String[] args) { System.out.println("Java 11 example"); } }
Majme jednoduchý Java zdrojový súbor. Tento súbor nemusí byť vytvorený v podadresári com/zetcode
.
$ ~/bin/jdk-11/bin/java SimpleEx.java Java 11 example
Aplikáciu spustíme, ako keby šlo o skriptovací jazyk.
Štandardizovaný HttpClient
Od Javy 9 bol v inkubátore zabudovaný HttpClient. Java 11 ho štandardizuje. HttpClient sa nachádza v balíčku java.net.http
.
package com.zetcode; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.URI; public class HttpClientEx { public static void main(String[] args) { var client = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("http://webcode.me")) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } }
V súbore HttpClientEx.java
vytvoríme klienta a vyšleme asynchrónne požiadavku na server webcode.me. Odpoveď vypíšeme na konzolu.
$ ~/bin/jdk-11/bin/java HttpClientEx.java <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>My html page</title> </head> <body> <p> Today is a beautiful day. We go swimming and fishing. </p> <p> Hello there. How are you? </p> </body> </html>
Dostaneme takýto HTML výstup.
Nové reťazcové metódy
Do jadra jazyka boli zabudované nové metódy na prácu s reťazcami. Metóda repeat()
opakuje n-krát daný reťazec, metódy stripTrailing()
, stripLeading()
a strip()
odstraňujú biele znaky. Šikovná metóda isBlank()
testuje či je reťazec tvorený len bielymi znakmi a metóda lines()
nám vytvorí prúd z reťazca, ktorého časti sú oddelené znakom nového riadku.
package com.zetcode; public class StringMethodsEx { public static void main(String[] args) { var word = "falcon "; System.out.println(word.repeat(5)); var word2 = "\tnice blue\t"; System.out.println(word2 + "sky"); System.out.println(word2.stripTrailing() + "sky"); System.out.println(word2.stripLeading() + "sky"); System.out.println(word2.strip() + "sky"); var word3 = " "; System.out.println(word3.isEmpty()); System.out.println(word3.isBlank()); var words = "falcon\neagle\nsky\nwood\nforest"; words.lines().forEach(System.out::println); } }
V tomto príklade si otestujeme všetky spomínané metódy.
$ ~/bin/jdk-11/bin/java StringMethodsEx.java falcon falcon falcon falcon falcon nice blue sky nice bluesky nice blue sky nice bluesky false true falcon eagle sky wood forest
Metóda asMatchPredicate
Pre prácu s regulárnymi výrazmi máme novú metódu asMatchPredicate()
.
package com.zetcode; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class AsMatchPredicateEx { public static void main(String[] args) { var words = List.of("dog", "Dog", "DOG", "Doggy"); var pred = Pattern.compile("dog", Pattern.CASE_INSENSITIVE).asMatchPredicate(); words.forEach((word) -> { if (pred.test(word)) { System.out.printf("%s matches%n", word); } else { System.out.printf("%s does not match%n", word); } }); } }
Metóda asMatchPredicate()
vytvorí zo skompilovaného vzoru predikát, na ktorom potom voláme test()
metódu.
$ ~/bin/jdk-11/bin/java AsMatchPredicateEx.java dog matches Dog matches DOG matches Doggy does not match
Metódy readString a writeString
Trieda java.nio.file.Files
získala nové metódy. Metóda readString()
načíta obsah súboru do reťazca a writeString()
zapíše sekvenciu znakov do súboru.
package com.zetcode; import java.nio.file.Path; import java.nio.file.Files; import java.io.IOException; public class WriteStringEx { public static void main(String[] args) throws IOException { var words = "forest\nwood\nsky\nrock"; Files.writeString(Path.of("words.txt"), words); } }
Tento program zapíše štyri slová do súboru words.txt
.
package com.zetcode; import java.nio.file.Path; import java.nio.file.Files; import java.io.IOException; public class ReadStringEx { public static void main(String[] args) throws IOException { var fileName = "words.txt"; var data = Files.readString(Path.of("words.txt")); System.out.println(data); } }
Následne v tomto ďalšom príklade načítame dáta zo súboru words.txt
a vypíšeme ich na obrazovku.
$ ~/bin/jdk-11/bin/java ReadStringEx.java forest wood sky rock
Ďalšie zmeny
Java 11 ďalej prináša dva experimentálne garbage collectory, implementáciu Unicode 10 štandardu, novinky v oblasti bezpečnosti (TLS 1.3 protokol, kryptografické algoritmy) a Java Flight Recorder, čo je framework určený na profilovanie a spracovanie udalostí.
Ďalšie informácie môžete získať na openjdk.java.net/projects/jdk/11/ a JDK 11 Release Notes.