Java 9: tutto ciò che devi sapere sulle funzionalità di New Java
Pubblicato: 2018-04-24Java, il linguaggio di programmazione altamente accessibile, è stato un gioco da ragazzi per gli sviluppatori di tutto il mondo. Sin dalla sua nascita nel 1995, la lingua ha visto un ampio utilizzo in vari settori.
Oggi troverai Java sui tuoi telefoni. Alimentare il sistema operativo Android e la miriade di app offerte da Android. Viene utilizzato per lo sviluppo di giochi come Minecraft che ha un'enorme base di giocatori. Trova impiego anche in applicazioni aziendali come la lettura delle informazioni sulle carte di credito alle casse dei negozi e l'alimentazione delle informazioni tra i sistemi e le banche.
Dopo un intervallo di 3 anni, Java ha lanciato la sua nuova edizione: Java SE 9. Con diverse modifiche all'architettura chiave e funzionalità aggiuntive, Java SE 9 offre una soluzione potente che gli sviluppatori desideravano ardentemente.
Java 7 ha aggiunto la prova con le risorse nel 2011, offrendo una migliore funzionalità di gestione delle risorse.
Java 8 ha aggiunto espressioni lambda, una buona mossa ma leggermente imperfetta sotto il paradigma OOP.
Ora Java Solutions consente ai programmatori di avere metodi privati. Metodi statici privati! Sì, avete letto bene!
Java SE 8 ha offerto molti cambiamenti strutturali che sono stati ricevuti con emozioni contrastanti dagli sviluppatori. Principalmente, queste sono le carenze di Java SE 8 che Java SE 9 ha cercato di superare:
- Il JDK non era navigabile per il piccolo dispositivo informatico
- Non c'è stato alcun miglioramento generale nelle prestazioni dell'applicazione
- Non c'era sicurezza e manutenzione generali di JDK
- Gli sviluppatori Java hanno incontrato difficoltà per costruire e mantenere le librerie di codice e applicazioni più grandi
Quindi, diamo un'occhiata alle principali modifiche e miglioramenti offerti da Java 9 rispetto ai suoi predecessori
Elabora gli aggiornamenti dell'API in Java 9
Tradizionalmente, l'API di Java è stata di natura primitiva. Quel supporto per avviare nuovi processi, reindirizzare output e flussi di errore. In Java 9, i nuovi aggiornamenti all'API di processo abilitano:
- Ottenere il PID del processo JVM corrente e qualsiasi altro
- Gestione dei sottoprocessi
- Gestione dei sottoprocessi
- Ottieni informazioni come PID, nome e utilizzo delle risorse dei processi in esecuzione nel sistema.
Questo è un codice di esempio, che stampa il PID corrente e le informazioni sul processo corrente:
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 in Java 9
Questa funzionalità dovrebbe essere riformata nelle versioni successive o potrebbe anche essere rimossa completamente.
In precedenza gli sviluppatori si affidavano a librerie di terze parti, ad esempio Apache HTTP, Jersey e tante altre. L'API HTTP di Java è precedente alla specifica HTTP/1.1 ed è sincrona e difficile da mantenere. Queste limitazioni richiedevano l'aggiunta di una nuova API. La nuova API client HTTP fornisce quanto segue:
- Un'API semplice e concisa per gestire la maggior parte delle richieste HTTP
- Supporto per la specifica HTTP/2
- Migliori prestazioni
- Migliore sicurezza
- Qualche altro miglioramento
Ecco un frammento di codice per effettuare una richiesta HTTP GET utilizzando le nuove API. Questo è il modulo come definito nel file module-info.java:
module newfeatures{
requires jdk.incubator.httpclient;
}
Il codice seguente usa l'API client HTTP. Questa è una parte del modulo 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());
}
}
}
Altre funzionalità di aggiornamenti della concorrenza in Java 9
Con Java 9 è stata introdotta una nuova classe chiamata – java.util.concurrent.Flow, che supporta l'implementazione di un framework publish-subscribe. Questo framework consente agli sviluppatori di creare componenti. Questi componenti possono consumare in modo asincrono un flusso di dati in tempo reale impostando editori che producono i dati e sottoscrittori che consumano i dati. Queste le nuove interfacce:
- java.util.concurrent.Flow.Publisher
- java.util.concurrent.Flow.Subscriber
- java.util.concurrent.Flow.Subscription
- java.util.concurrent.Flow.Processor (che funge sia da editore che da abbonato).
Script della shell Java (Read-Eval-Print-Loop) in Java 9
L'obiettivo del progetto Kulla era di studiare l'aggiunta dello strumento REPL (Read-Eval-Print-Loop) per Java 9. Questa versione di Java include uno speciale strumento a riga di comando chiamato JShell. L'obiettivo qui è rendere popolare e massimizzare l'utilizzo di REPL. Che cosa vuol dire? Ora, non è necessario racchiudere alcune righe di codice in un metodo separato per eseguirle. Efficiente? Io dico si.
Ad esempio, in Scala, un semplice programma Hello World è scritto come scala>println(“Hello World”);
Eseguiamo il comando JShell, come mostrato nell'immagine seguente:
Progetto Jigsaw in Java 9
La carta vincente delle nuove funzionalità di Java 9 è il sistema aall-newmodule. La creazione di sistemi complessi spesso implica codici complessi di alto livello che risultano in ambiguità. Con la complessità del codice, si devono affrontare due problemi fondamentali: l'incapsulamento del codice è difficile e non vi è alcuna nozione di dipendenze esplicite tra diversi file JAR di un sistema. È possibile accedere a ogni classe pubblica da qualsiasi altra classe pubblica nel percorso di classe. Ciò porta a un utilizzo non necessario di classi che non dovevano essere API pubbliche. Inoltre, il percorso di classe stesso è problematico: come fai a sapere se sono presenti tutti i JAR richiesti e per quanto riguarda le voci duplicate? Il sistema di moduli risolve entrambi i problemi.
È qui che si vede la natura robusta di Java 9. I file JAR modulari contengono un descrittore di modulo aggiuntivo. In questo descrittore di modulo, le istruzioni `requires` sono usate per esprimere le dipendenze da altri moduli. Inoltre, le istruzioni `exports` controllano quali pacchetti sono accessibili ai diversi moduli. Per impostazione predefinita, tutti i pacchetti non esportati sono incapsulati nel modulo.
Ci sono vari PEC, che fanno parte di questo progetto, come segue:
JEP 200 – JDK modulare: applica il sistema di moduli della piattaforma Java per modularizzare il JDK che può essere combinato in fase di compilazione, in fase di compilazione o in fase di esecuzione.
JEP 201 – codice sorgente modulare: utilizzato per creare moduli e consente di creare strumenti per compilare i moduli creati
JEP 220 – immagini di runtime modulari: questo JEP migliora le prestazioni, la sicurezza e la manutenibilità ristrutturando le immagini di runtime JDK e JRE per accogliere i moduli
JEP 282 – Il jlink, noto come linker Java: usi come moduli di confezionamento e loro dipendenze in meno tempi di esecuzione.
File JAR a rilascio multiplo
Per sfruttare le nuove funzionalità della piattaforma Java nelle versioni più recenti, gli sviluppatori della libreria devono rilasciare una versione più recente della propria libreria. Presto ci saranno più versioni della libreria mantenute dagli sviluppatori, il che può essere catastrofico. Per superare questa limitazione, Java 9 dispone di multi-release di file JAR che consentono agli sviluppatori di creare file JAR con diverse versioni di file di classe per diverse versioni di Java. Dai un'occhiata a questo esempio.
Un'illustrazione dei file JAR correnti come segue:
radice di vaso
- Una classe
– Classe B
– Classe C
Ecco come appaiono i file JAR multi-release:
radice di vaso
- Una classe
– Classe B
– Classe C
– META-INF
– versioni
– – 9
- - - - Una classe
– – 10
– – – – Classe B
Nell'illustrazione precedente, i file JAR supportano i file di classe per due versioni Java 9 e 10. Quindi, quando il JAR viene eseguito sulla versione 9 di Java, le cartelle A.class nelle versioni – 9 vengono prelevate per l'esecuzione.
Le versioni precedenti di Java che non supportano i file JAR a più versioni, le classi nella directory delle versioni non vengono mai utilizzate. Quindi, se esegui il file JAR a più versioni su Java 8, è come eseguire un semplice file JAR.
Secondo me, le cose stanno iniziando a cambiare con Java. E questa è una tendenza in crescita. Significa che la popolarità di Java e del suo utilizzo ne risentirà? Affatto. Java è stato ed è tuttora un linguaggio di programmazione incredibilmente potente e robusto nel settore tecnologico di oggi. Inizia a imparare Java e guarda come fa la differenza nella tua carriera. In bocca al lupo!
Nota dell'autore:
Quell'articolo tecnico è fornito da Sumit, che lavora su tecnologie di tendenza come DevOps, Big Data e Python. E nel team di marketing digitale di Edureka.