1. Istoricul versiunilor de Java

Istoria Java începe în 1991, când un grup de programatori Sun a decis să creeze un limbaj pentru dispozitivele mici: telecomenzi pentru televizor, aparate de cafea, prăjitoare de pâine, carduri bancare și așa mai departe.

Producătorii acestor dispozitive au folosit procesoare foarte diferite pentru a-și controla produsele, așa că a devenit foarte important să fie legat de arhitectura unui anumit procesor sau sistem de operare.

Creatorii Java au decis să împartă problema în două părți: programele lor ar fi compilate nu în codul mașinii pentru un anumit procesor, ci într-un cod intermediar special. La rândul său, acel cod intermediar ar fi executat de un program special numit mașină virtuală .

Majoritatea programatorilor se referă la un computer ca la o mașină.

Interesant.

C++ a fost luat ca bază pentru limbajul Java și a fost foarte simplificat și standardizat. Dacă C++ vă permite să faceți ceva în 10 moduri, atunci Java a păstrat doar una dintre ele. În unele privințe, a fost ca trecerea de la hieroglife la un alfabet.

Prima versiune de Java a fost lansată în 1996. Din acel moment, Java și-a început marșul triumfal în jurul lumii, care, la rândul său, a stimulat evoluția și creșterea limbajului în sine. Astăzi, milioane de biblioteci și miliarde de linii de cod sunt scrise în Java, iar noi versiuni de Java sunt lansate la fiecare 6 luni:

Nume An Numărul de clase
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

Deși versiunile de Java au fost lansate în mod regulat, ele nu au avut toate o semnificație egală pentru programatori: Java a evoluat cu succes.


2. Java 2

Primul mare salt înainte a avut loc odată cu lansarea JDK 1.2. A avut atât de multe inovații acolo încât creatorii lui Java l-au redenumit Java 2 Platform Standard Edition sau J2SE 1.2 pe scurt.

Principalele inovații au fost:

  • strictfpcuvânt cheie
  • Biblioteca Swing pentru lucrul cu grafica
  • Compilatorul JIT, care a accelerat execuția programelor Java
  • Un set imens de colecții
  • Suport complet Unicode: japoneză, chineză și coreeană.

Astăzi, aceste inovații nu par atât de mari, dar fiecare mare proiect crește dintr-unul mic. Java nu ar fi la fel de popular astăzi dacă un grup mic de programatori nu ar fi continuat să îmbunătățească limbajul acum 20 de ani.


3. Java 5

JDK 1.5 a fost lansat în septembrie 2004. De asemenea, a introdus o mulțime de inovații, așa că nu a putut să nu merite un nou nume: în loc de versiunile 1.5, 1.6 și 1.7, au decis să folosească 5.0, 6.0 și 7.0. Deci, numele complet al JDK 1.5 a fost Java 2 Standard Edition 5.0

Această actualizare a inclus lucruri fără de care dezvoltarea ulterioară a limbajului nu ar fi fost posibilă.

Adnotări . Jumătate dintre cadrele moderne majore sunt construite pe adnotări, de la Spring și Hibernate la JUnit.

Generice . Genericurile au dus puterea colecțiilor (și multe altele) la noi culmi. Codul a devenit mai simplu, mai compact și mai sigur.

Autoboxing/unboxing este conversia automată între tipurile primitive și tipurile lor de înveliș. Acest lucru a făcut mult mai ușor să scrieți și să citiți codul și a făcut colecțiile și mai populare.

Bucla reprezintă acum cel puțin jumătate din toate buclele pe care le scriu programatorii foreach. Și, desigur, este indispensabil atunci când lucrați cu colecții.

Enum este o altă caracteristică nouă plăcută . Ea permite multor lucruri să fie frumos simplificate.

Acestea nu sunt toate inovațiile: au fost adăugate sute de clase noi. Important este că au fost doar inovațiile potrivite și au dat un alt impuls puternic popularității Java.


4. Java 6

Java 6 este amintit pentru un număr mare de mici îmbunătățiri și abandonarea numărului 2 din nume: nu mai era „Java 2 Standard Edition 6.0”, ci pur și simplu „Java Standard Edition 6.0”.

Iată câteva dintre inovațiile interesante:

API -ul Java Compiler a făcut posibilă apelarea compilatorului Java direct din cod. Aceasta înseamnă că programul dvs. poate genera acum text reprezentând codul clasei, îl poate compila apelând metode ale API-ului Java Compiler și apoi începe imediat să apeleze metodele clasei compilate. Există zone întregi de dezvoltare în care această abilitate simplifică foarte mult viața.

A devenit posibilă executarea JavaScript direct în cadrul unui program Java. Această caracteristică a apărut deoarece JavaSE 6 a inclus motorul Rhino JavaScript.


5. Java 7

Java 7 a fost lansat în iulie 2011. Se presupunea că ar fi multe îmbunătățiri în el, dar programatorii au reușit să adauge doar o mică parte din ceea ce era planificat. În special, au adăugat lucruri precum:

O nouă bibliotecă pentru lucrul cu intrarea și ieșirea datelor. Cunoscut sub numele de New Input Output API , se află în java.niopachet.

Inferența de tip automată a compilatorului Java în timpul compilării permite programatorilor să scrie mai puțin cod. Compilatorul a devenit mai inteligent și acesta a fost doar începutul.

Declarația switch a câștigat capacitatea de a folosi șiruri de caractere ca valori de caz.

Gestionarea automată a resurselor s-a îmbunătățit, de asemenea, semnificativ: cu try-with-resourcesconstrucția, un program Java vă poate închide fluxurile de date atunci când nu mai sunt necesare.

Au existat multe alte modificări, dar nu sunt atât de importante în stadiul nostru actual de învățare a Java.


6. Java 8

Java 8 a apărut în martie 2014 și a fost cea mai puternică actualizare recentă a Java.

Mai presus de toate, programatorii îl amintesc pentru adăugarea de expresii lambda și interfețe funcționale (adnotarea @FunctionalInterface). Le vom examina la Nivelul 21. Codul dvs. nu va mai fi niciodată același.

Au fost adăugate fluxuri și pentru colecții, care, în combinație cu expresii lambda, au făcut posibilă scrierea codului mult mai compact. Deși nu întotdeauna mult mai ușor de citit.

Interesant.

Iar a treia schimbare majoră a fost introducerea de către Java 8 a unui nou API pentru lucrul cu date și ore - API-ul Date Time . Îl vom studia în viitorul apropiat.


7. Java 9

Java 9 a fost lansat în septembrie 2017. Din acel moment, creatorii Java au decis să lanseze noi versiuni mai frecvent – ​​la fiecare șase luni. Probabil că au fost impresionați de abordarea adoptată de dezvoltatorii browserului Google Chrome.

Versiunea Java 9 sa concentrat mai mult pe elementele interne ale mașinii Java. Cel mai semnificativ lucru pe care l-a adus programatorilor obișnuiți a fost capacitatea de a împărți un program în module. Acest lucru este foarte convenabil atunci când aveți zeci de mii de clase sau când codul dvs. descarcă în mod dinamic pluginuri.

Dar probabil că ne va fi de puțin folos în viitorul apropiat.


8. Java 11

La șase luni după lansarea Java 9, a apărut Java 10, iar alte șase luni mai târziu, a apărut Java 11.

Au fost făcute o mulțime de mici îmbunătățiri în acest timp, dar cel mai probabil vă veți aminti doar două:

A adăugat suport pentru Unicode 10. Acum puteți folosi emoji-uri în programele dvs. Java. Puteți lucra cu ele în același mod în care lucrați cu tipul boolean:

Inferența tipului a fost îmbunătățită și a apărut varcuvântul cheie , care vă va plăcea cu siguranță.

Acum puteți scrie următoarele:

var str = "Hello";

Și compilatorul convertește asta în:

String str = "Hello";

Dar au fost și unele pierderi. Creatorii Java au renunțat la biblioteci precum JavaFX, Java EE și CORBA din JDK 11.


9. Importanța compatibilității

Când este lansată o nouă versiune, programatorii vor să înceapă de la zero. La urma urmei, cine vrea să remedieze o grămadă de erori vechi când sunt absolut siguri cum ar fi trebuit scris codul de la bun început?

Dar istoria nu susține o astfel de abordare. De fiecare dată când programatorii lansează o nouă versiune a unui program, 90% dintre utilizatorii acestuia folosesc o versiune veche. Ei pot folosi sau ignora noile caracteristici ale programului, dar ceea ce utilizatorii urăsc este atunci când ceva care înainte funcționa bine nu mai funcționează.

Multe produse grozave au murit când programatorii au lansat versiuni noi care nu erau compatibile. Sau pur și simplu când au făcut schimbări majore. De exemplu, ideea de a renunța la butonul Start în Windows 8 nu a atras utilizatorii. Lansarea Windows 10 a adus înapoi jumătate din ceea ce a fost eliminat în Windows 8.

În plus, Windows vă permite să rulați programe scrise acum 20 de ani pentru Windows 95 sau chiar scrise acum 30 de ani pentru MS DOS 3.0 - vor funcționa. Acesta este unul dintre motivele pentru care Windows rămâne popular.

Și Java nu ar fi atât de popular ca dacă dezvoltatorii săi nu le-ar păsa de compatibilitate. De fiecare dată când există o nouă versiune a mașinii Java, o nouă versiune a SDK-ului sau modificări majore ale claselor, tot codul Java scris din ianuarie 1996 continuă să funcționeze.

Acest lucru se realizează de obicei doar prin adăugarea de noi metode, clase și pachete, fără a elimina nimic. Această abordare are avantajele și dezavantajele sale.

Pe de o parte, Java trage o grămadă de bagaje sub formă de cod vechi, suboptim și inutil. Pe de altă parte, proiectul tău scris în Java 11 poate folosi întotdeauna o bibliotecă scrisă în Java 8 care folosește biblioteci scrise în Java 5 și Java 2. Acest amestec de cod va funcționa foarte bine.

Cu limbajul C++, bibliotecile compilate atât pentru platformele pe 32 de biți, cât și pe 64 de biți nu pot fi utilizate în același proiect. Și vei avea o mare bătaie de cap dacă descoperi brusc că tipul charfolosit într-o bibliotecă folosește un octet, în timp ce altul folosește doi octeți.


10. Depreciat

Deci, creatorii lui Java au decis să nu elimine nimic, ci doar să adauge noi clase și pachete. Dar cum le anunță programatorilor că există o nouă alternativă demnă la o soluție existentă suboptimă?

Pentru a face acest lucru, au venit cu @Deprecatedadnotarea.

Dacă o metodă sau o clasă este depreciată, această adnotare este adăugată lângă declarația sa. Înseamnă că programatorii sunt descurajați să folosească codul.

Puteți utiliza în continuare o clasă sau o metodă depreciată, dar nu este recomandată.

Și cât de des fac oamenii lucruri care nu sunt recomandate? Aproape întotdeauna 🙂

Multe clase au fost depreciate de 20 de ani - au fost folosite și sunt încă folosite. Oamenii sunt familiarizați cu ele sau sunt doar convenabile. Dar există riscul ca acestea să fie îndepărtate la un moment dat, așa că este mai bine să nu le folosiți.

Toate IDE-urile moderne, inclusiv IntelliJ IDEA, pot gestiona @Deprecatedadnotarea. Numele claselor și metodelor depreciate sunt afișate folosind formatarea barată . Ceva de genul:

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

Clasele depreciate sunt foarte populare și se găsesc adesea în cod, așa că ne vom uita la unele dintre ele în curând.