Java 9 – Tot ce trebuie să știți despre caracteristicile noului Java

Publicat: 2018-04-24

Java, limbajul de programare extrem de accesibil, a fost o problemă pentru dezvoltatorii de pe tot globul. Încă de la începuturile sale, în 1995, limbajul a cunoscut o utilizare largă în diverse industrii.

Astăzi, veți găsi Java pe telefoanele dvs. Pornește sistemul de operare Android și multitudinea de aplicații pe care le oferă Android. Este folosit pentru dezvoltarea de jocuri precum Minecraft, care are o bază imensă de jucători. De asemenea, își găsește utilizare în aplicații de afaceri, cum ar fi citirea informațiilor cărților de credit la casele magazinelor și transmiterea informațiilor între sisteme și bănci.

După o pauză de 3 ani, Java a lansat noua sa ediție – Java SE 9. Cu mai multe modificări arhitecturale cheie și funcții suplimentare, Java SE 9 oferă o soluție puternică la care dezvoltaseră tânjeau.

Java 7 a adăugat try-with-resource în 2011, oferind o funcționalitate mai bună de gestionare a resurselor.
Java 8 a adăugat expresii lambda, o mișcare bună, dar ușor defecte în paradigma OOP.

Acum Java Solutions permite programatorilor să aibă metode private. Metode statice private! DA, ai citit bine!

Java SE 8 a oferit multe schimbări structurale care au fost primite cu emoții amestecate de către dezvoltatori. În principal, acestea sunt deficiențele Java SE 8 pe care Java SE 9 a încercat să le depășească:

  1. JDK-ul nu era navigabil pentru dispozitivul de calcul mic
  2. Nu a existat nicio îmbunătățire generală a performanței aplicației
  3. Nu a existat securitate și întreținere generală a JDK
  4. Dezvoltatorii Java au întâmpinat dificultăți în a construi și susține bibliotecile de cod și aplicațiile mai mari

Deci, să ne uităm la schimbările și îmbunătățirile cheie pe care le oferă Java 9 față de predecesorii săi

Procesați actualizările API-ului în Java 9

În mod tradițional, API-ul Java a fost de natură primitivă. Acest suport pentru lansarea de noi procese, redirecționarea ieșirii și fluxurile de erori. În Java 9, noile actualizări ale API-ului Process permit:

  1. Obținerea PID-ului curentului și al oricărui alt proces JVM
  2. Gestionarea subproceselor
  3. Gestionarea subproceselor
  4. Obțineți informații precum PID, numele și utilizarea resurselor proceselor care rulează în sistem.

Acesta este un exemplu de cod, care tipărește PID-ul curent, precum și informațiile curente ale procesului:

public class NewFeatures
{
public static void main(String [] args)
{
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID:"+ currentProcess.getPid());
ProcessHandle.Info currentProcessInfo = currentProcess.info();
System.out.println("Info:" + currentProcessInfo);
}
}

Client HTTP/2 în Java 9

Se așteaptă ca această caracteristică să fie reformată în versiunile ulterioare sau chiar să fie eliminată complet.
Anterior, dezvoltatorii se bazau pe bibliotecile terțe, de exemplu Apache HTTP, Jersey și multe altele. API-ul HTTP al Java este anterioară specificației HTTP/1.1 și este sincron și greu de întreținut. Aceste limitări au impus necesitatea de a adăuga un nou API. Noul API client HTTP oferă următoarele:

  1. Un API simplu și concis pentru a face față majorității solicitărilor HTTP
  2. Suport pentru specificația HTTP/2
  3. Performanță mai bună
  4. Securitate mai bună
  5. Încă câteva îmbunătățiri

Iată un fragment de cod pentru a face o solicitare HTTP GET folosind noile API-uri. Acesta este modulul definit în fișierul module-info.java:

module newfeatures{
requires jdk.incubator.httpclient;
}

Următorul cod utilizează HTTP Client API. Aceasta este o parte a modulului jdk.incubator.httpclient :

import jdk.incubator.http.*;
import java.net.URI;
public class Http2Feature{
public static void main(String[] args) throws Exception{
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest
.newBuilder(new URI(http://httpbin.org/get;))
.GET()
.version(HttpClient.Version.HTTP_1_1)
.build();
HttpResponse.String response = client.send(request,
HttpResponse.BodyHandler.asString());
System.out.println("Status code:" + response.statusCode());
System.out.println("Response Body:" + response.body());
}
}
}

Mai multe funcții de actualizări simultane în Java 9

Cu Java 9, a fost introdusă o nouă clasă numită – java.util.concurrent.Flow, care sprijină implementarea unui cadru de publicare-abonare. Acest cadru le permite dezvoltatorilor să construiască componente. Aceste componente pot consuma în mod asincron un flux live de date prin configurarea editorilor care produc datele și a abonaților care consumă datele. Acestea sunt noile interfețe:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (care acționează atât ca editor, cât și ca abonat).

Java Shell Scripting (Read-Eval-Print-Loop) în Java 9

Scopul Proiectului Kulla a fost să investigheze adăugarea instrumentului REPL (Read-Eval-Print-Loop) pentru Java 9. Această ediție a Java include un instrument special de linie de comandă numit JShell. Scopul aici este de a populariza și de a maximiza utilizarea REPL. Deci, ce înseamnă asta? Acum, nu este nevoie să împachetați câteva linii de cod într-o metodă separată pentru a le rula. Eficient? Eu spun da.
De exemplu, în Scala, un program simplu Hello World este scris ca scala>println(„Hello World”);
Să rulăm comanda JShell, așa cum se arată în următoarea imagine:

limbaj de programare, java 9

Proiect Jigsaw în Java 9

Atuul noilor caracteristici din Java 9 este sistemul de module noi. Crearea de sisteme complexe implică adesea coduri complexe de nivel înalt, care duc la ambiguitate. Cu complexitatea codului, se confruntă două probleme fundamentale: încapsularea codului este dificilă și nu există nicio noțiune de dependențe explicite între diferite fișiere JAR ale unui sistem. Fiecare clasă publică poate fi accesată de orice altă clasă publică de pe classpath. Acest lucru duce la utilizarea inutilă a claselor care nu au fost menite să fie API publice. În plus, calea de clasă în sine este problematică: de unde știi dacă toate JAR-urile necesare sunt acolo și cum rămâne cu intrările duplicate? Sistemul de module rezolvă ambele probleme.
Aici se vede natura robustă a Java 9. Fișierele JAR modulare conțin un descriptor de modul suplimentar. În acest descriptor de modul, instrucțiunile „requires” sunt folosite pentru a exprima dependențe de alte module. În plus, instrucțiunile `exports` controlează ce pachete sunt accesibile diferitelor module. În mod implicit, toate pachetele neexportate sunt încapsulate în modul.

Există diverse JEP, care fac parte din acest proiect, după cum urmează:

JEP 200 – JDK modular: Acesta aplică sistemul de module de platformă Java pentru a modulariza JDK-ul care poate fi combinat în timpul compilării, al construirii sau al rulării.
JEP 201 – cod sursă modular: folosit pentru a crea module și permite instrumentelor de construire să compila modulele create
JEP 220 – imagini modulare de rulare: acest JEP îmbunătățește performanța, securitatea și mentenabilitatea prin restructurarea imaginilor de rulare JDK și JRE pentru a găzdui module.
JEP 282 – Jlink, cunoscut sub numele de linker Java: utilizări ca module de ambalare și dependențe ale acestora în timpi de rulare mai puțini.

Fișiere JAR cu versiuni multiple

Pentru a folosi noile caracteristici ale platformei Java pe versiuni mai noi, dezvoltatorii de biblioteci trebuie să lanseze o versiune mai nouă a bibliotecii lor. În curând, vor exista mai multe versiuni ale bibliotecii întreținute de dezvoltatori, ceea ce poate fi catastrofal. Pentru a depăși această limitare, Java 9 oferă versiuni multiple de fișiere JAR, permițând dezvoltatorilor să construiască fișiere JAR cu diferite versiuni de fișiere de clasă pentru diferite versiuni Java. Aruncă o privire la acest exemplu.

O ilustrare a fișierelor JAR curente, după cum urmează:

rădăcină de borcan
- O clasa
– clasa B
– Clasa C

Iată cum arată fișierele JAR cu versiuni multiple:

rădăcină de borcan

- O clasa
– clasa B
– Clasa C
– META-INF
– versiuni
– – 9
- - - - O clasa
– – 10
– – – – Clasa B

În ilustrația anterioară, fișierele JAR au suportat fișiere de clasă pentru două versiuni Java 9 și 10. Deci, atunci când JAR este executat pe versiunea 9 a Java, clasa A din versiunile – 9 foldere sunt preluate pentru execuție.

Versiunile anterioare de Java care nu acceptă fișiere JAR cu versiuni multiple, clasele din directorul versiuni nu sunt niciodată folosite. Deci, dacă rulați fișierul JAR cu versiuni multiple pe Java 8, este la fel de bun ca și rularea unui fișier JAR simplu.

După părerea mea, lucrurile încep să se schimbe cu Java. Și aceasta este o tendință în creștere. Înseamnă că popularitatea Java și este folosit vor fi afectate? Deloc. Java a fost și este încă un limbaj de programare incredibil de puternic și robust în industria tehnologiei de astăzi. Începeți să învățați Java și urmăriți-l că face diferența în cariera dvs. Noroc!

Nota autorului:
Acest articol tehnologic este contribuit de Sumit, care lucrează pe tehnologii în tendințe, cum ar fi DevOps, Big Data și Python. Și în echipa de marketing digital la Edureka.