Karakteristikat e Java 9 me shembuj
Java 9 është një version i madh dhe na ka sjellë shumë veçori për zhvilluesit. Në këtë artikull, ne do të shqyrtojmë në detaje veçoritë e Java 9.
Java 10 është lëshuar, për një përmbledhje të plotë të lëshimit të Java 10, kaloni në Karakteristikat e Java 10.
Karakteristikat e Java 9
- Java 9 REPL (JShell)
- Metodat e fabrikës për listën e pandryshueshme, grupin, hartën dhe hyrjen në hartë
- Metodat private në Ndërfaqet
- Sistemi i modulit Java 9
- Përpunoni përmirësimet e API-së
- Provo me përmirësimin e burimeve
- Përmirësimet e API-së CompleteableFuture
- Transmetimet reaktive
- Operator diamanti për klasën e brendshme anonime
- Përmirësime opsionale të klasës
- Përmirësimet e API-së së transmetimit
- Përmirësuar @Shënim i vjetëruar
- Klienti HTTP 2
- API i imazhit me shumë rezolucion
- Karakteristika të ndryshme Java 9
Oracle Corporation do të lëshojë Java SE 9 rreth fundit të marsit 2017. Në këtë postim, unë do të diskutoj shkurtimisht Veçoritë e Java 9 me disa shembuj.
Java 9 REPL (JShell)
Oracle Corp ka prezantuar një mjet të ri të quajtur \jshell. Ai qëndron për Java Shell dhe i njohur gjithashtu si REPL (Read Evaluate Print Loop). Përdoret për të ekzekutuar dhe testuar çdo konstruksion Java si klasa, ndërfaqe, enum, objekt, deklarata. etj. shumë lehtë. Ne mund të shkarkojmë softuerin JDK 9 EA (Early Access) nga https://jdk9.java.net/download/
G:\>jshell
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro
jshell> int a = 10
a ==> 10
jshell> System.out.println("a value = " + a )
a value = 10
Nëse dëshironi të dini më shumë rreth mjetit REPL, ju lutemi kaloni në veçoritë e Java 9 REPL (Pjesa-2).
Metodat e fabrikës për listën e pandryshueshme, grupin, hartën dhe hyrjen në hartë
Oracle Corp ka prezantuar disa metoda fabrike të përshtatshme për të krijuar objekte Lista e Pandryshueshme, Set, Harta dhe Map.Entry. Këto metoda të dobishme përdoren për të krijuar objekte të Koleksionit bosh ose jo bosh. Në Java SE 8 dhe versionet e mëparshme, Ne mund të përdorim metodat e përdorimit të klasës Koleksione si unmodifiableXXX
për të krijuar objekte të Koleksionit të Pandryshueshëm. Për shembull, nëse duam të krijojmë një listë të pandryshueshme, atëherë mund të përdorim metodën Collections.unmodifiableList
. Megjithatë, këto metoda Collections.unmodifiableXXX
janë një qasje e lodhshme dhe e folur. Për të kapërcyer këto mangësi, Oracle Corp ka shtuar disa metoda të dobishme në ndërfaqet List, Set dhe Map. Ndërfaqet Lista dhe Set kanë metoda \of() për të krijuar një listë të pandryshueshme bosh ose jo bosh ose objekte Set siç tregohet më poshtë: Shembulli i listës bosh
List immutableList = List.of();
Shembull i listës jo bosh
List immutableList = List.of("one","two","three");
Harta ka dy grupe metodash: metodat of()
dhe metodat ofEntries()
për të krijuar respektivisht një objekt të Hartës së Pandryshueshme dhe një objekt të Pandryshueshëm Map.Entry. Shembulli bosh i hartës
jshell> Map emptyImmutableMap = Map.of()
emptyImmutableMap ==> {}
Shembull i hartës jo bosh
jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
nonemptyImmutableMap ==> {2=two, 3=three, 1=one}
Nëse dëshironi të lexoni më shumë rreth këtyre metodave të shërbimeve, ju lutemi kaloni në lidhjet e mëposhtme:
- Metodat e fabrikës Java 9 për listën e pandryshueshme
- Metodat e fabrikës Java 9 për grupin e pandryshueshëm
- Metodat e fabrikës Java 9 për Hartën e Pandryshueshme dhe Hartën. Hyrja
Metodat private në ndërfaqe
Në Java 8, ne mund të ofrojmë zbatimin e metodës në Ndërfaqet duke përdorur metodat e paracaktuara dhe statike. Megjithatë ne nuk mund të krijojmë metoda private në Ndërfaqe. Për të shmangur kodin e tepërt dhe më shumë ripërdorim, Oracle Corp do të prezantojë metoda private në ndërfaqet Java SE 9. Nga Java SE 9 e tutje, ne mund të shkruajmë metoda statike private dhe private gjithashtu në një ndërfaqe duke përdorur një fjalë kyçe private. Këto metoda private janë vetëm si metodat e tjera private të klasës, nuk ka asnjë ndryshim midis tyre.
public interface Card{
private Long createCardID(){
// Method implementation goes here.
}
private static void displayCardDetails(){
// Method implementation goes here.
}
}
Nëse dëshironi të lexoni më shumë rreth kësaj veçorie të re, ju lutemi kaloni këtë lidhje: Java 9 Metodat private në ndërfaqe.
Sistemi i modulit Java 9
Një nga ndryshimet e mëdha ose veçoria java 9 është Sistemi i Modulit. Oracle Corp do të prezantojë veçoritë e mëposhtme si pjesë e Projektit Jigsaw.
- JDK modulare
- Kodi burimor modular Java
- Imazhet modulare të kohës së funksionimit
- Përmbledh API-të e brendshme Java
- Sistemi i modulit të platformës Java
Përpara versioneve Java SE 9, ne po përdorim Monolithic Kavanoza për të zhvilluar aplikacione të bazuara në Java. Kjo arkitekturë ka shumë kufizime dhe të meta. Për të shmangur të gjitha këto mangësi, Java SE 9 vjen me Sistemin e Modulit. JDK 9 vjen me 92 module (mund të ndryshojë në lëshimin përfundimtar). Ne mund të përdorim modulet JDK dhe gjithashtu mund të krijojmë modulet tona siç tregohet më poshtë: Shembull i modulit të thjeshtë
module com.foo.bar { }
Këtu po përdorim 'modulin' për të krijuar një modul të thjeshtë. Çdo modul ka një emër, kod të lidhur dhe burime të tjera. Për të lexuar më shumë detaje rreth kësaj arkitekture të re dhe përvojës praktike, ju lutemi kaloni nëpër tutorialet e mia origjinale këtu:
- Bazat e sistemit të modulit Java 9
- Shembuj të modulit Java 9 duke përdorur linjën e komandës
- Shembull i modulit Java 9 Hello World duke përdorur Eclipse IDE
Procesi i përmirësimeve të API-së
Java SE 9 po vjen me disa përmirësime në Process API. Ata kanë shtuar disa klasa dhe metoda të reja për të lehtësuar kontrollin dhe menaxhimin e proceseve të OS. Dy ndërfaqe të reja në Process API:
- java.lang.ProcessHandle
- java.lang.ProcessHandle.Info
Shembulli i API-së së procesit
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("Current Process Id: = " + currentProcess.getPid());
Provoni me përmirësimin e burimeve
Ne e dimë, Java SE 7 ka prezantuar një konstrukt të ri për trajtimin e përjashtimeve: Provoni-Me-Resources për të menaxhuar burimet automatikisht. Qëllimi kryesor i kësaj deklarate të re është \Menaxhimi automatik më i mirë i burimeve. Java SE 9 do të ofrojë disa përmirësime në këtë deklaratë për të shmangur më shumë fjalë të folura dhe për të përmirësuar njëfarë lexueshmërie. Shembull Java SE 7
void testARM_Before_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (BufferedReader reader2 = reader1) {
System.out.println(reader2.readLine());
}
}
Shembull Java 9
void testARM_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (reader1) {
System.out.println(reader1.readLine());
}
}
Për të lexuar më shumë rreth kësaj veçorie të re, ju lutemi kaloni në tutorialin tim origjinal në: Java 9 Try-Me-Resources Improvements
Përmirësimet e CompletableFuture API
Në Java SE 9, Oracle Corp do të përmirësojë CompletableFuture API për të zgjidhur disa probleme të ngritura në Java SE 8. Ato do të shtohen për të mbështetur disa vonesa dhe afate kohore, disa metoda të shërbimeve dhe nën-klasizim më të mirë.
Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);
Këtu delayedExecutor() është një metodë statike e shërbimeve që përdoret për të kthyer një ekzekutues të ri që i dorëzon një detyrë ekzekutuesit të paracaktuar pas vonesës së dhënë.
Rrjedhat reaktive
Në ditët e sotme, Programimi Reaktiv është bërë shumë i popullarizuar në zhvillimin e aplikacioneve për të marrë disa përfitime të bukura. Scala, Play, Akka, etj. Kornizat tashmë kanë integruar Rrjedhat Reaktive dhe kanë marrë shumë përfitime. Oracle Corps po prezanton gjithashtu API-në e re Reactive Streams në Java SE 9. Java SE 9 Reactive Streams API është një Kuadër Publikimi/Subscribe për të zbatuar aplikacione Asinkrone, të Scalueshme dhe Paralele shumë lehtë duke përdorur gjuhën Java. Java SE 9 ka prezantuar API-në e mëposhtme për të zhvilluar Rrjedhat Reaktive në aplikacionet e bazuara në Java.
- java.util.concurrent.Flow
- java.util.concurrent.Flow.Publisher
- java.util.concurrent.Flow.Subscriber
- java.util.concurrent.Flow.Processor
Lexoni më shumë në Java 9 Reactive Streams.
Operator diamanti për klasën e brendshme anonime
Ne e dimë, Java SE 7 ka prezantuar një veçori të re: Operatori Diamanti për të shmangur kodin e tepërt dhe verbozitetin, për të përmirësuar lexueshmërinë. Megjithatë, në Java SE 8, Oracle Corp (Zhvilluesi i Bibliotekës Java) ka gjetur se disa kufizime në përdorimin e operatorit Diamond me Anonim Inner Class. Ata i kanë rregulluar ato probleme dhe do t'i lëshojnë ato si pjesë e Java 9.
public List getEmployee(String empid){
// Code to get Employee details from Data Store
return new List(emp){ };
}
Këtu po përdorim vetëm \Lista pa specifikuar parametrin e tipit.
Përmirësimet opsionale të klasës
Në Java SE 9, Oracle Corp ka shtuar disa metoda të reja të dobishme në klasën java.util.Optional. Këtu do të diskutoj për një nga ato metoda me një shembull të thjeshtë: metoda e transmetimit Nëse një vlerë është e pranishme në objektin e dhënë Opsionale, kjo metodë stream() kthen një Stream sekuencial me atë vlerë. Përndryshe, ai kthen një transmetim bosh. Ata kanë shtuar metodën \stream() për të punuar me përtesë në objekte opsionale siç tregohet më poshtë:
Stream<Optional> emp = getEmployee(id)
Stream empStream = emp.flatMap(Optional::stream)
Këtu metoda Optional.stream() përdoret për të kthyer një objekt Stream of Optional of Employee në një Stream of Employee në mënyrë që ne të mund të punojmë me përtesë në këtë rezultat në kodin e rezultatit. Për të kuptuar më shumë rreth kësaj veçorie me më shumë shembuj dhe për të lexuar më shumë metoda të reja të shtuara në klasën opsionale, ju lutemi kaloni në tutorialin tim origjinal në: Java SE 9: Përmirësimet opsionale të klasës
Përmirësimet e API-së së transmetimit
Në Java SE 9, Oracle Corp ka shtuar katër metoda të reja të dobishme në ndërfaqen java.util.Stream. Duke qenë se Stream është një ndërfaqe, të gjitha ato metoda të reja të implementuara janë metoda të paracaktuara. Dy prej tyre janë shumë të rëndësishme: metodat dropWhile dhe takeWhile Nëse jeni njohur me Scala Language ose ndonjë gjuhë programimi Functions, patjetër që do të dini për këto metoda. Këto janë metoda shumë të dobishme për të shkruar disa kode të stilit funksional. Le të diskutojmë metodën e shërbimeve takeWhile këtu. Kjo takeWhile() merr një kallëzues si argument dhe kthen një Stream të nëngrupit të vlerave të dhëna Stream derisa ai predikat të kthejë false për herë të parë. Nëse vlera e parë NUK e kënaq atë kallëzues, ajo thjesht kthen një transmetim bosh.
jshell> Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i < 5 )
.forEach(System.out::println);
1
2
3
4
Për të lexuar më shumë rreth metodave takeWhile dhe dropWhile dhe metodave të tjera të reja, ju lutemi kaloni në tutorialin tim origjinal në: Java SE 9: Përmirësimet e API-së së transmetimit
Përmirësuar @Shënim i vjetëruar
Në Java SE 8 dhe versionet e mëparshme, shënimi @Deprecated për të ofruar më shumë informacion rreth API-së së vjetëruar dhe gjithashtu ofron një Mjet për të analizuar përdorimin statik të një aplikacioni të API-ve të vjetruara. Ata kanë shtuar dy metoda në këtë ndërfaqe të vjetëruar: forRemoval dhe që për të shërbyer këtë informacion.
Klienti HTTP 2
Në Java SE 9, Oracle Corp do të lëshojë API-në e re të klientit HTTP 2 për të mbështetur protokollin HTTP/2 dhe veçoritë e WebSocket. Meqenëse API-ja e klientit HTTP ekzistuese ose e vjetër ka probleme të shumta (si mbështetja e protokollit HTTP/1.1 dhe nuk mbështet protokollin HTTP/2 dhe WebSocket, funksionon vetëm në modalitetin e bllokimit dhe shumë probleme të performancës.), ata po e zëvendësojnë këtë API të lidhjes HttpURLC me HTTP të re klient. Ata do të prezantojnë një API të ri të klientit HTTP 2 nën paketën \java.net.http. Ai mbështet të dy protokollet HTTP/1.1 dhe HTTP/2. Mbështet të dy modalitetet sinkron (Modaliteti i bllokimit) dhe modaliteti asinkron. Ai mbështet asinkronin Modaliteti duke përdorur API-në WebSocket. Mund ta shohim këtë API të re në https://download.java.net/java/jdk9/docs/api/java/net/http/package-summary.html Shembulli i klientit HTTP 2<
jshell> import java.net.http.*
jshell> import static java.net.http.HttpRequest.*
jshell> import static java.net.http.HttpResponse.*
jshell> URI uri = new URI("https://rams4java.blogspot.co.uk/2016/05/java-news.html")
uri ==> https://rams4java.blogspot.co.uk/2016/05/java-news.html
jshell> HttpResponse response = HttpRequest.create(uri).body(noBody()).GET().response()
response ==> java.net.http.HttpResponseImpl@79efed2d
jshell> System.out.println("Response was " + response.body(asString()))
Ju lutemi, kaloni udhëzuesin tim origjinal në: Java SE 9: Klienti HTTP 2 për të kuptuar protokollin HTTP/2 dhe WebSocket, Përfitimet e API-së së re dhe të metat e API-së së Vjetër me disa shembuj të dobishëm.
API imazhi me shumë rezolucion
Në Java SE 9, Oracle Corp do të prezantojë një API të re të imazhit me shumë rezolucion. Ndërfaqja e rëndësishme në këtë API është MultiResolutionImage. Është në dispozicion në paketën java.awt.image. MultiResolutionImage përmbledh një grup imazhesh me lartësi dhe gjerësi të ndryshme (që janë rezolucione të ndryshme) dhe na lejon t'i kërkojmë ato me kërkesat tona.
Karakteristika të ndryshme Java 9
Në këtë seksion, unë do të listoj vetëm disa veçori të ndryshme të Java SE 9 të reja. NUK po them se këto janë veçori më pak të rëndësishme. Ato janë gjithashtu të rëndësishme dhe të dobishme për t'i kuptuar shumë mirë me disa shembuj të dobishëm. Deri tani, nuk kam marrë informacion të mjaftueshëm për këto veçori. Kjo është arsyeja pse unë do t'i rendis këtu për një kuptim të shkurtër. Unë do t'i marr këto veçori një nga një dhe do t'i shtoj seksionit të mësipërm me një diskutim dhe shembull të shkurtër. Dhe së fundi shkruani një tutorial të veçantë më vonë.
- Përmirësime GC (Garbage Collector)
- Stack-Walking API
- Filtro të dhënat hyrëse të serializimit
- Aplikoni API-në e Applet
- Indifiko lidhjen e vargut
- Dorëzat e metodës së përmirësuar
- API dhe shërbimi i regjistrimit të platformës Java
- Vargjet kompakte
- API Parser për Nashorn
- Kërkimi Javadoc
- HTML5 Javadoc
Unë do t'i marr këto veçori java 9 një nga një dhe do t'i përditësoj me përshkrim dhe shembuj të mjaftueshëm. Kjo ka të bëjë me veçoritë e Java 9 shkurtimisht me shembuj.