Guida alle versioni e alle funzionalità di Java

Guida alle versioni e alle funzionalità di Java

Java 8, Java 11, Java 13-qual è la differenza?

È possibile utilizzare questa guida per trovare e installare l’ultima Java, comprendere le differenze tra le distribuzioni Java (AdoptOpenJdk, OpenJDK, OracleJDK, ecc.), oltre a ottenere una panoramica delle funzionalità del linguaggio Java, incluse le versioni Java 8-13.,

Potrebbe piacerti anche: Beyond Java 8

Informazioni di base

Per prima cosa, diamo un’occhiata ad alcune domande comuni e pratiche che le persone hanno quando cercano di scegliere la versione Java giusta per il loro progetto.

Se vuoi saperne di più su una versione specifica, vai al sito AdoptOpenJDK, scegli l’ultima versione di Java, scaricala e installala. Poi tornare a questa guida e ancora imparare una cosa o due su diverse versioni di Java.

Quale versione Java dovrei usare?,

A partire da settembre 2019, Java 13 è l’ultima versione Java rilasciata, con versioni più recenti che seguono ogni 6 mesi: Java 14 è previsto per marzo 2020, Java 15 per settembre 2020 e così via. In passato, i cicli di rilascio Java erano molto più lunghi, fino a 3-5 anni!.

Con così tante nuove versioni in uscita, ci sono fondamentalmente questi scenari di utilizzo del mondo reale:

  • I progetti legacy nelle aziende sono spesso bloccati usando Java 8 (vedi “Perché le aziende sono ancora bloccate su Java 8?”sezione sotto). Pertanto, sarai costretto a utilizzare anche Java 8.,
  • Alcuni progetti legacy sono anche bloccati su Java 1.5 (rilasciato 2004) o 1.6 (rilasciato 2006) — scusate, amici!
  • Se ti assicuri di utilizzare gli IDE, i framework e gli strumenti di compilazione più recenti e di avviare un progetto greenfield, puoi, senza esitazione, utilizzare Java 11 (LTS) o anche l’ultimo Java 13.
  • C’è il campo speciale dello sviluppo di Android in cui la versione Java è fondamentalmente bloccata su Java 7, con un set specifico di funzionalità Java 8 disponibili. Oppure, puoi passare all’utilizzo del linguaggio di programmazione Kotlin.

Perché le aziende sono ancora bloccate su Java 8?,

C’è un mix di diversi motivi per cui le aziende sono ancora bloccate con Java 8. Per citarne alcuni:

  • Strumenti di compilazione (Maven, Gradle, ecc.) e alcune librerie inizialmente avevano bug con versioni Java versions > 8 e necessitavano di aggiornamenti. Anche oggi, ad esempio con Java 9+, alcuni strumenti di compilazione stampano “reflective access”-avvisi durante la creazione di progetti Java, che semplicemente “non si sentono pronti”, anche se le build vanno bene.
  • Fino a Java 8, stavi praticamente usando le build JDK di Oracle e non dovevi preoccuparti delle licenze., Oracle ha cambiato lo schema di licenza in 2019, tuttavia, il che ha fatto impazzire Internet dicendo “Java non è più libero” — e ne è seguita una discreta quantità di confusione. Questo, tuttavia, non è davvero un problema, che imparerai nella sezione “Distribuzioni Java” di questa guida.
  • Alcune aziende hanno politiche per utilizzare solo le versioni LTS e si affidano ai loro fornitori di sistemi operativi per fornire loro queste build, il che richiede tempo.

Per riassumere, hai un mix di problemi pratici (aggiornamento di strumenti, librerie, framework) e problemi politici.,

Perché alcune versioni di Java sono chiamate 1.X?

Le versioni Java prima di 9 avevano semplicemente uno schema di denominazione diverso. Quindi, Java 8 può anche essere chiamato 1.8, Java 5 può essere chiamato 1.5,ecc. Quando hai emesso il comandojava -version con queste versioni, hai ottenuto un output come questo:

Questo significa semplicemente Java 8. Con il passaggio alle versioni basate sul tempo con Java 9, anche lo schema di denominazione è cambiato e le versioni Java non hanno il prefisso 1.x più. Ora, il numero di versione è simile a questo:

Qual è la differenza tra le versioni Java?, Dovrei imparare uno specifico?

Provenendo da altri linguaggi di programmazione con importanti interruzioni tra le versioni, come ad esempio Python 2 a 3, ci si potrebbe chiedere se lo stesso vale per Java.

Java è speciale in questo senso, in quanto è estremamente retrocompatibile. Ciò significa che il tuo programma Java 5 o 8 è garantito per l’esecuzione con una macchina virtuale Java 8-13, con alcune eccezioni di cui non devi preoccuparti per ora.

Ovviamente non funziona al contrario, ad esempio il tuo programma si basa su funzionalità Java 13 che semplicemente non sono disponibili con una JVM Java 8.,

Questo significa un paio di cose:

  • Non si “impara” solo una versione Java specifica, come Java 12.
  • Piuttosto, otterrai una buona base in tutte le funzionalità linguistiche fino a Java 8.
  • E poi, puoi imparare, da una guida come questa, quali funzionalità aggiuntive sono arrivate in Java 9-13 e usarle ogni volta che puoi.

Quali sono esempi di queste nuove funzionalità tra le versioni Java?

Dai un’occhiata alla sezione “Java Features 8-13” di seguito.,

Ma come regola generale: i cicli di rilascio più vecchi e più lunghi (3-5 anni, fino a Java 8) hanno significato molte nuove funzionalità per rilascio.

Il ciclo di rilascio di sei mesi significa meno funzionalità per rilascio, quindi puoi recuperare rapidamente le funzionalità del linguaggio Java 9-13.

Qual è la differenza tra un JRE e un JDK?

Fino ad ora, abbiamo parlato solo di ” Java.”Ma cos’è esattamente Java?

Innanzitutto, è necessario distinguere tra un JRE (Java Runtime Environment) e un JDK (Java Development Kit).,

Storicamente, hai scaricato solo un JRE se eri interessato solo all’esecuzione di programmi Java. Un JRE include, tra le altre cose, la Java Virtual Machine (JVM) e lo strumento da riga di comando “java”.

Per sviluppare nuovi programmi Java, era necessario scaricare un JDK. Un JDK include tutto ciò che il JRE ha, così come il compilatore javace un paio di altri strumenti come javadoc(Java documentation generator) e jdb (Java Debugger).

Ora perché sto parlando al passato?,

Fino a Java 8, il sito web Oracle offriva JRE e JDK come download separati, anche se il JDK includeva sempre un JRE in una cartella separata. Con Java 9, quella distinzione era fondamentalmente sparita e stai sempre scaricando un JDK. Anche la struttura delle directory di JDKS è cambiata, non avendo più una cartella JRE esplicita.

Quindi, anche se alcune distribuzioni (vedi la sezione “Distribuzioni Java”) offrono ancora un download JRE separato, sembra esserci la tendenza di offrire solo un JDK. Quindi, useremo Java e JDK in modo intercambiabile da ora in poi.,

Come posso installare Java o un JDK allora?

Ignorare le immagini Java-Docker, .wrapper msi o pacchetti specifici della piattaforma per il momento. Alla fine, Java è solo un .file zip; niente di più, niente di meno.

Pertanto, tutto ciò che devi fare per installare Java sulla tua macchina è decomprimere il tuo jdk-{5-13}.file zip. Non hai nemmeno bisogno di diritti di amministratore per questo.,

il Tuo decompresso il file Java sarà simile a questa:

La magia accade nella directory /bin, che sotto Windows, assomiglia a questo:

Directory C:\dev\jdk-11\bin...12.11.2019 19:23 272.736 java.exe...12.11.2019 19:23 20.832 javac.exe...

tutto quello che dovete fare è decomprimere il file e messo nella directory /bin nella variabile PATH, quindi è possibile chiamare il “java” comando da qualsiasi luogo.

(Nel caso te lo stia chiedendo, gli installatori GUI come quello di Oracle o AdoptOpenJDK eseguiranno la decompressione e la modifica della variabile PATH per te, questo è tutto.,)

Per verificare di aver installato Java correttamente, è sufficiente eseguire java -version. Se l’output è simile a quello qui sotto, sei a posto!

Ora, rimane una domanda: dove prendi quel Java .file zip da? Il che ci porta al tema delle distribuzioni.

Distribuzioni Java

C’è una varietà di siti che offrono download Java (leggi: JDK) e non è chiaro “chi offre cosa e con quale licenza”. Questa sezione farà luce su questo.,

Il progetto OpenJDK

In termini di codice sorgente Java (leggi: il codice sorgente per il tuo JRE/JDK), c’è solo uno che vive sul sito del progetto OpenJDK.

Questo è solo il codice sorgente, tuttavia, non una build distribuibile (pensa: il tuo .file zip con il comando java compilato per il sistema operativo specifico). In teoria, io e te potremmo produrre una build da quel codice sorgente, chiamarla, diciamo, MarcoJDK e iniziare a distribuirla. Ma la nostra distribuzione mancherebbe di certificazione, per essere in grado di definirci legalmente compatibili con Java SE.,

Ecco perché, in pratica, c’è una manciata di fornitori che effettivamente creano queste build, le ottengono certificate (vedi TCK) e poi le distribuiscono.

E mentre i fornitori non possono, ad esempio, rimuovere un metodo dalla classe String prima di produrre una nuova build Java, possono aggiungere il marchio (yay!) o aggiungere altre utilità (ad esempio CLI) che ritengono utili. Ma a parte questo, il codice sorgente originale è lo stesso per tutte le distribuzioni Java.

OpenJDK costruisce (da Oracle) e OracleJDK costruisce

Uno dei fornitori che costruisce Java dal sorgente è Oracle., Ciò porta a due diverse distribuzioni Java, che possono essere molto confuse all’inizio.

  1. OpenJDK costruisce da Oracle(!). Queste build sono gratuite e senza marchio, ma Oracle non rilascerà aggiornamenti per le versioni precedenti, ad esempio Java 13, non appena esce Java 14.
  2. OracleJDK, che è una build commerciale di marca che inizia con il cambio di licenza nel 2019. Ciò significa che può essere utilizzato gratuitamente durante lo sviluppo, ma è necessario pagare Oracle se lo si utilizza in produzione. Per questo, ottieni un supporto più lungo, cioè aggiornamenti alle versioni e un numero di telefono che puoi chiamare se la tua JVM impazzisce.,

Ora, storicamente (pre-Java 8), c’erano differenze di origine effettive tra le build OpenJDK e le build OracleJDK, dove si poteva dire che OracleJDK era “migliore”. Ma ad oggi, entrambe le versioni sono essenzialmente le stesse, con piccole differenze.

Si riduce quindi a te che vuoi un supporto commerciale a pagamento (un numero di telefono) per la tua versione Java installata.

AdoptOpenJDK

Nel 2017, un gruppo di membri del gruppo di utenti Java, sviluppatori e fornitori (Amazon, Microsoft, Pivotal, Red Hat e altri) ha avviato una comunità chiamata AdoptOpenJDK.,

Forniscono build OpenJDK gratuite e solide con disponibilità / aggiornamenti più lunghi e offrono persino la scelta di due diverse macchine virtuali Java: HotSpot e OpenJ9.

Ti consiglio vivamente se stai cercando di installare Java.

Azul Zulu, Amazon Corretto, SAPMachine

Troverai un elenco completo delle build OpenJDK sul sito OpenJDK Wikipedia. Tra loro ci sono Azul Zulu, Amazon Corretto, così come SapMachine, per citarne alcuni. Per semplificare eccessivamente, si riduce a voi avere diverse opzioni di supporto/garanzie di manutenzione.,

Ma assicuratevi di controllare i singoli siti web per conoscere i vantaggi di ogni singola distribuzione.

Raccomandazione

Java Features 8-13

Come accennato all’inizio di questa guida: Essenzialmente tutte le funzionalità del linguaggio Java 8 (non essere schizzinosi ora) funzionano in Java 13. Lo stesso vale per tutte le altre versioni Java in mezzo.

A sua volta, questo significa che tutte le funzionalità del linguaggio di Java 8 servono come una buona conoscenza di base Java, e tutto il resto (Java 9-13) è praticamente funzionalità aggiuntive in cima a quella linea di base.,

Ecco una rapida panoramica di ciò che le versioni specifiche hanno da offrire:

Java 8

Java 8 è stato un rilascio di massa e si può trovare un elenco di tutte le caratteristiche sul sito Oracle. Ci sono due set di funzionalità principali che vorrei menzionare qui:

Caratteristiche della lingua: Lambda, ecc.,

Prima di Java 8, ogni volta che si voleva creare un’istanza, per esempio, un nuovo Eseguibile, si doveva scrivere un anonimo classe interna, in questo modo:

 Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } };

Con le espressioni lambda, lo stesso codice simile a questo:

Runnable runnable = () -> System.out.println("Hello world two!");

Hai anche avuto il metodo di riferimenti, ripetendo le annotazioni, i metodi predefiniti per le interfacce, e un paio di altre caratteristiche del linguaggio.

Collections & Streams

In Java 8, hai anche operazioni in stile funzionale per le collezioni, note anche come API Stream., Un rapido esempio:

List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");

Ora, pre-Java 8, in pratica dovevi scrivere for-loops per fare qualcosa con quella lista.

Con l’API Streams, puoi fare quanto segue:

list.stream() .filter(name -> name.startsWith("f")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);

Java 9

Java 9 era anche una versione abbastanza grande, con un paio di aggiunte:

Collections

Collections ha ottenuto un paio di nuovi metodi di supporto per costruire facilmente Liste, Set e Mappe.,

List<String> list = List.of("one", "two", "three");Set<String> set = Set.of("one", "two", "three");Map<String, String> map = Map.of("foo", "one", "bar", "two");

Streams

Streams got a couple of additions, in the form of takeWhile, dropWhile, and iterate methods.

Stream<String> stream = Stream.iterate("", s -> s + "s") .takeWhile(s -> s.length() < 10);

Optionals

Optionals got the sorely missed ifPresentOrElse method.,

user.ifPresentOrElse(this::displayAccount, this::displayLogin);

Interfacce

Interfacce ottenuto private metodi:

public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); }}

Altre Caratteristiche del Linguaggio

E un paio di altri miglioramenti, un miglioramento di provare-con-le risorse economico o di diamante, operatore estensioni.

JShell

Infine, Java ha ottenuto una shell in cui è possibile provare semplici comandi e ottenere risultati immediati.

% jshell| Welcome to JShell -- Version 9| For an introduction type: /help introjshell> int x = 10x ==> 10

HTTPClient

Java 9 ha portato la versione di anteprima iniziale di un nuovo HttpClient., Fino ad allora, il supporto Http integrato di Java era piuttosto di basso livello e dovevi ricorrere all’utilizzo di librerie di terze parti come Apache HttpClient o OkHttp (che sono grandi librerie, btw!).

Con Java 9, Java ha il suo client moderno, anche se questo è in modalità di anteprima, il che significa che è soggetto a modifiche nelle versioni successive di Java.

Project Jigsaw: moduli Java e file Jar multi-release

Java 9 ha ottenuto il sistema di moduli Jigsaw, che assomiglia in qualche modo alla buona vecchia specifica OSGI., Non è nell’ambito di questa guida per entrare in tutti i dettagli su Jigsaw, ma dare un’occhiata ai link precedenti per saperne di più.

Multi-rilascio .i file jar hanno reso possibile averne uno .file jar che contiene diverse classi per diverse versioni JVM. Quindi, il tuo programma può comportarsi in modo diverso / avere classi diverse utilizzate quando viene eseguito su Java 8 rispetto a Java 10, ad esempio.

Java 10

Ci sono state alcune modifiche a Java 10, come garbage collection, ecc., Ma l’unico vero cambiamento che probabilmente vedrai come sviluppatore è l’introduzione della parola chiave var, chiamata anche inferenza di tipo variabile locale.

Inferenza del tipo di variabile locale: var-keyword

// Pre-Java 10String myName = "Marco";// With Java 10var myName = "Marco"

Si sente Javascript-y, vero? È ancora fortemente tipizzato, tuttavia, e si applica solo alle variabili all’interno dei metodi (grazie, dpash, per averlo sottolineato di nuovo).

Java 11

Java 11 era anche una versione un po ‘ più piccola, dal punto di vista degli sviluppatori.,

Strings&Files

Strings and files got a couple of new methods (not all listed here):

Run Source Files

A partire da Java 10, è possibile eseguire i file sorgente Java senza doverli prima compilare. Un passo verso lo scripting.

ubuntu@DESKTOP-168M0IF:~$ java MyScript.java

Locale-Tipo di Variabile di Inferenza (var), per Lambda Parametri

L’intestazione dice tutto:

(var firstName, var lastName) -> firstName + lastName

HttpClient

HttpClient da Java 9 nel suo finale, non versione di anteprima.,

Altre chicche

Registratore di volo, Garbage Collector no-Op, motore Nashorn-Javascript deprecato, ecc.

Java 12

Java 12 ha un paio di nuove funzionalità e clean-up, ma gli unici che vale la pena menzionare qui sono il supporto Unicode 11 e un’anteprima della nuova espressione switch, che vedrai trattata nella prossima sezione.

Java 13

Puoi trovare un elenco completo di funzionalità qui, ma in sostanza, stai ricevendo Unicode 12.,1 supporto, oltre a due funzioni di anteprima nuove o migliorate (soggette a modifiche in futuro):

Cambia espressione (Anteprima)

Le espressioni di commutazione possono ora restituire un valore., E si può usare un lambda-stile di sintassi per le espressioni, senza la caduta-attraverso/pausa questioni:

il Vecchio interruttore dichiarazioni guardato come questo:

switch(status) { case SUBSCRIBER: // code block break; case FREE_TRIAL: // code block break; default: // code block}

Mentre con Java 13, istruzioni switch possono assomigliare a questa:

le Stringhe Multiriga (Anteprima)

Si può finalmente fare questo in Java:

Java 14 e Successive

Sarà coperto da qui, non appena sono sempre rilasciato. Torna presto!,

Conclusione

A questo punto, dovresti avere una buona panoramica di un paio di cose:

  • Come installare Java, quale versione ottenere e da dove ottenerlo (suggerimento: AdoptOpenJDK).
  • Cos’è una distribuzione Java, quali esistono e quali sono le differenze.
  • Quali sono le differenze tra le versioni Java specifiche.

Feedback, correzioni e input casuali sono sempre i benvenuti! Basta lasciare un commento in basso.

Grazie per la lettura!

C’è di più da dove proviene

Questo articolo è originariamente apparso su www.marcobehler.,com / scritto come parte di una serie di guide sulla moderna programmazione Java. Per trovare altre guide, visita il sito web o iscriviti alla newsletter per ricevere la notifica delle guide appena pubblicate: https://bit.ly/2K0Ao4F.

Riconoscimenti

Stephen Colebourne ha scritto un fantastico articolo sulle diverse distribuzioni Java disponibili. Grazie, Stephen!

Ulteriori letture

JVM Ecosystem Survey: perché gli sviluppatori non stanno passando a Java 11

Oltre Java 8

Quando Java 11 sostituirà Java 8 come Java predefinito?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *