1. Storia delle versioni di Java

La storia di Java inizia nel 1991, quando un gruppo di programmatori Sun decise di creare un linguaggio per piccoli dispositivi: telecomandi TV, caffettiere, tostapane, carte bancarie e così via.

I produttori di questi dispositivi utilizzavano processori molto diversi per controllare i loro prodotti, quindi è diventato molto importante essere legati all'architettura di un particolare processore o sistema operativo.

I creatori di Java decisero di suddividere il problema in due parti: i loro programmi sarebbero stati compilati non nel codice macchina per un processore specifico, ma in uno speciale codice intermedio. A sua volta, quel codice intermedio verrebbe eseguito da un programma speciale chiamato macchina virtuale .

La maggior parte dei programmatori si riferisce a un computer come a una macchina.

Interessante.

Il C++ è stato preso come base per il linguaggio Java ed è stato notevolmente semplificato e standardizzato. Se il C++ ti permetteva di fare qualcosa in 10 modi, allora Java ne conservava solo uno. Per certi versi è stato come il passaggio dai geroglifici all'alfabeto.

La prima versione di Java è stata rilasciata nel 1996. Da quel momento, Java ha iniziato la sua marcia trionfante in tutto il mondo, che, a sua volta, ha stimolato l'evoluzione e la crescita del linguaggio stesso. Oggi milioni di librerie e miliardi di righe di codice sono scritte in Java e ogni 6 mesi vengono rilasciate nuove versioni di Java:

Nome Anno Numero di classi
JDK 1.0 1996 211
JDK 1.1 1997 477
J2SE 1.2 1998 1.524
J2SE 1.3 2000 1.840
J2SE 1.4 2002 2.723
J2SE 5.0 2004 3.279
Java SE 6 2006 3.793
Java SE 7 2011 4.024
Java SE 8 2014 4.240
Java SE 9 2017 6.005
Java SE 10 2018 6.002
Java SE 11 2018 4.411
Java SE 12 2019 4.433
Java SE 13 2019 4.515

Sebbene le versioni di Java venissero rilasciate regolarmente, non tutte avevano lo stesso significato per i programmatori: Java si è evoluto a singhiozzo.


2. Giava 2

Il primo grande balzo in avanti è avvenuto con il rilascio di JDK 1.2. Aveva così tante innovazioni lì che i creatori di Java lo ribattezzarono Java 2 Platform Standard Edition o J2SE 1.2 in breve.

Le principali innovazioni sono state:

  • strictfpparola chiave
  • La libreria Swing per lavorare con la grafica
  • Il compilatore JIT, che ha accelerato l'esecuzione dei programmi Java
  • Un enorme set di collezioni
  • Pieno supporto Unicode: giapponese, cinese e coreano.

Oggi queste innovazioni non sembrano così grandi, ma ogni grande progetto nasce da uno piccolo. Java non sarebbe così popolare oggi se un piccolo gruppo di programmatori non avesse continuato a migliorare il linguaggio 20 anni fa.


3. Java 5

JDK 1.5 è stato rilasciato nel settembre 2004. Ha anche introdotto molte innovazioni, quindi non poteva fare a meno di meritare un nuovo nome: invece delle versioni 1.5, 1.6 e 1.7, hanno deciso di utilizzare 5.0, 6.0 e 7.0. Quindi, il nome completo di JDK 1.5 era Java 2 Standard Edition 5.0

Questo aggiornamento includeva elementi senza i quali l'ulteriore sviluppo del linguaggio non sarebbe stato possibile.

Annotazioni . La metà dei principali framework moderni è costruita su annotazioni, da Spring e Hibernate a JUnit.

Generici . I generici hanno portato il potere delle raccolte (e molto altro) a nuovi livelli. Il codice è diventato più semplice, più compatto e più sicuro.

Autoboxing/unboxing è la conversione automatica tra tipi primitivi e i loro tipi wrapper. Ciò ha reso molto più facile scrivere e leggere il codice e ha reso le raccolte ancora più popolari.

Il foreachciclo ora rappresenta almeno la metà di tutti i cicli che i programmatori scrivono. E, naturalmente, è indispensabile quando si lavora con le collezioni.

L' enumerazione è un'altra bella novità. Permette di semplificare magnificamente molte cose.

Queste non sono tutte le novità: sono state aggiunte centinaia di nuove classi. L'importante è che fossero proprio le innovazioni giuste e diedero un altro potente impulso alla popolarità di Java.


4. Giava 6

Java 6 è ricordato per un gran numero di piccoli miglioramenti e per l'abbandono del numero 2 nel nome: non era più "Java 2 Standard Edition 6.0", ma semplicemente "Java Standard Edition 6.0".

Ecco alcune delle interessanti novità:

L' API del compilatore Java ha reso possibile chiamare il compilatore Java direttamente dal codice. Ciò significa che il tuo programma ora potrebbe generare testo che rappresenta il codice della classe, compilarlo chiamando i metodi dell'API Java Compiler e quindi iniziare immediatamente a chiamare i metodi della classe compilata. Ci sono intere aree di sviluppo in cui questa capacità semplifica enormemente la vita.

È diventato possibile eseguire JavaScript direttamente all'interno di un programma Java. Questa funzione è apparsa perché JavaSE 6 includeva il motore JavaScript di Rhino.


5. Giava 7

Java 7 è stato rilasciato nel luglio 2011. Dovevano esserci molti miglioramenti, ma i programmatori sono riusciti ad aggiungere solo una piccola parte di quanto pianificato. In particolare, hanno aggiunto cose come:

Una nuova libreria per lavorare con input e output di dati. Conosciuto come New Input Output API , si trova nel java.niopacchetto.

L' inferenza automatica del tipo del compilatore Java in fase di compilazione consente ai programmatori di scrivere meno codice. Il compilatore è diventato più intelligente, e quello era solo l'inizio.

L'istruzione switch ha acquisito la capacità di utilizzare le stringhe come valori di maiuscole e minuscole.

Anche la gestione automatica delle risorse è migliorata in modo significativo: con il try-with-resourcescostrutto, un programma Java può chiudere i flussi di dati per te quando non sono più necessari.

Ci sono stati molti altri cambiamenti, ma non sono così importanti nella nostra attuale fase di apprendimento di Java.


6. Giava 8

Java 8 è uscito a marzo 2014 ed è stato l'aggiornamento recente più potente di Java.

Soprattutto, i programmatori lo ricordano per l'aggiunta di espressioni lambda e interfacce funzionali (l' @FunctionalInterfaceannotazione). Li esamineremo al livello 21. Il tuo codice non sarà mai più lo stesso.

Sono stati aggiunti anche flussi per le raccolte, che, in combinazione con le espressioni lambda, hanno permesso di scrivere codice in modo molto più compatto. Anche se non sempre molto più leggibile.

Interessante.

E il terzo grande cambiamento è stata l'introduzione da parte di Java 8 di un'API completamente nuova per lavorare con date e orari: l' API Date Time . Lo studieremo prossimamente.


7. Giava 9

Java 9 è stato rilasciato a settembre 2017. Da quel momento, i creatori di Java hanno deciso di rilasciare nuove versioni più frequentemente, ogni sei mesi. Probabilmente sono rimasti colpiti dall'approccio adottato dagli sviluppatori del browser Google Chrome.

La versione Java 9 si è concentrata maggiormente sugli interni della macchina Java. La cosa più significativa che ha portato ai normali programmatori è stata la capacità di dividere un programma in moduli. Questo è molto utile quando hai decine di migliaia di classi o quando il tuo codice scarica dinamicamente i plugin.

Ma probabilmente ci sarà di scarsa utilità nel prossimo futuro.


8. Giava 11

Sei mesi dopo il rilascio di Java 9, è uscito Java 10 e altri sei mesi dopo è uscito Java 11.

Durante questo periodo sono stati apportati molti piccoli miglioramenti, ma molto probabilmente ne ricorderete solo due:

Ha aggiunto il supporto per Unicode 10. Ora puoi usare gli emoji nei tuoi programmi Java. Puoi lavorare con loro nello stesso modo in cui lavori con il tipo booleano:

L'inferenza del tipo è stata migliorata ed è apparsa la varparola chiave , che sicuramente ti piacerà.

Ora puoi scrivere quanto segue:

var str = "Hello";

E il compilatore lo converte in:

String str = "Hello";

Ma c'erano anche alcune perdite. I creatori di Java hanno eliminato librerie come JavaFX, Java EE e CORBA da JDK 11.


9. Importanza della compatibilità

Quando viene rilasciata una nuova versione, i programmatori molto spesso vogliono ricominciare da zero. Dopotutto, chi vuole correggere un mucchio di vecchi bug quando sono assolutamente sicuri di come il codice avrebbe dovuto essere scritto fin dall'inizio?

Ma la storia non supporta un tale approccio. Ogni volta che i programmatori rilasciano una nuova versione di un programma, il 90% dei suoi utenti utilizza una vecchia versione. Possono utilizzare o ignorare le nuove funzionalità del programma, ma ciò che gli utenti odiano è quando qualcosa che funzionava bene smette di funzionare.

Molti grandi prodotti sono morti quando i programmatori hanno rilasciato nuove versioni che non erano compatibili. O semplicemente quando hanno apportato modifiche importanti. Ad esempio, l'idea di abbandonare il pulsante Start in Windows 8 non piaceva agli utenti. Il rilascio di Windows 10 ha restituito la metà di ciò che è stato rimosso in Windows 8.

Inoltre, Windows ti consente di eseguire programmi scritti 20 anni fa per Windows 95 o addirittura scritti 30 anni fa per MS DOS 3.0: funzioneranno. Questo è uno dei motivi per cui Windows rimane popolare.

E Java non sarebbe così popolare come lo è se i suoi sviluppatori non si preoccupassero della compatibilità. Ogni volta che c'è una nuova versione della macchina Java, una nuova versione dell'SDK o importanti modifiche alle classi, tutto il codice Java scritto dal gennaio 1996 continua a funzionare.

Questo di solito si ottiene aggiungendo solo nuovi metodi, classi e pacchetti, senza rimuovere nulla. Questo approccio ha i suoi pro e contro.

Da un lato, Java si trascina dietro un mucchio di bagagli sotto forma di codice vecchio, non ottimale e non necessario. D'altra parte, il tuo progetto scritto in Java 11 può sempre utilizzare una libreria scritta in Java 8 che utilizza librerie scritte in Java 5 e Java 2. Questo miscuglio di codice funzionerà perfettamente.

Con il linguaggio C++, le librerie compilate per entrambe le piattaforme a 32 e 64 bit non possono essere utilizzate nello stesso progetto. E avrai un enorme mal di testa se improvvisamente scopri che il chartipo utilizzato in una libreria utilizza un byte, mentre un altro utilizza due byte.


10. Deprecato

Quindi, i creatori di Java hanno deciso di non rimuovere nulla, ma solo di aggiungere nuove classi e pacchetti. Ma come fanno a far sapere ai programmatori che esiste una nuova degna alternativa a una soluzione subottimale esistente?

Per fare questo, hanno inventato l' @Deprecatedannotazione.

Se qualche metodo o classe è deprecato, questa annotazione viene aggiunta accanto alla sua dichiarazione. Significa che i programmatori sono scoraggiati dall'usare il codice.

È comunque possibile utilizzare una classe o un metodo obsoleto, ma non è consigliato.

E quanto spesso le persone fanno cose che non sono raccomandate? Quasi sempre 🙂

Molte classi sono state deprecate per 20 anni: sono state utilizzate e sono ancora utilizzate. Le persone li conoscono o sono semplicemente convenienti. Ma c'è il rischio che a un certo punto vengano rimossi, quindi è meglio non usarli.

Tutti gli IDE moderni, incluso IntelliJ IDEA, possono gestire l' @Deprecatedannotazione. I nomi delle classi e dei metodi obsoleti vengono visualizzati utilizzando la formattazione barrata . Qualcosa come questo:

Date date = new Date();
int day = date.getDay();

Le classi deprecate sono molto popolari e spesso si trovano nel codice, quindi ne esamineremo presto alcune.