puteți utiliza acest ghid pentru a găsi și a instala cea mai recentă Java, să înțeleagă diferențele dintre Java distribuții (AdoptOpenJdk, OpenJDK, OracleJDK, etc.), precum și a obține o imagine de ansamblu a caracteristicilor limbajului Java, inclusiv versiunile Java 8-13.,
Ați putea dori, de asemenea: Dincolo de Java 8
Informatii de Fond
în Primul rând, haideți să aruncăm o privire la unele comune, practice întrebări pe care oamenii le au atunci când încearcă pentru a alege dreptul de Java versiunea pentru proiectul lor.dacă doriți să aflați mai multe despre o anumită versiune, accesați site-ul AdoptOpenJDK, alegeți cea mai recentă versiune Java, descărcați-o și instalați-o. Apoi reveniți la acest ghid și învățați încă un lucru sau două despre diferite versiuni Java.
ce versiune Java ar trebui să folosesc?,
Din septembrie 2019, Java 13 este cea mai recentă versiune Java lansată, versiunile mai noi urmând la fiecare 6 luni — Java 14 este programat pentru martie 2020, Java 15 pentru septembrie 2020 și așa mai departe. În trecut, ciclurile de lansare Java erau mult mai lungi, până la 3-5 ani!.
Cu atât de multe versiuni noi iese, există, de fapt, aceste din lumea reală scenarii de utilizare:
- Legacy proiecte în companii sunt de multe ori blocat folosind Java 8 (vezi „de Ce Sunt Companiile Încă Blocat Pe Java 8?”secțiunea de mai jos). Astfel, veți fi obligat să utilizați și Java 8.,
- unele proiecte vechi sunt chiar blocate pe Java 1.5 (lansat în 2004) sau 1.6 (lansat în 2006) — ne pare rău, prieteni!
- dacă vă asigurați că utilizați cele mai recente IDE-uri, cadre și instrumente de construire și începeți un proiect greenfield, puteți, fără ezitare, să utilizați Java 11 (LTS) sau chiar cel mai recent Java 13.
- există domeniul special de dezvoltare Android în cazul în care versiunea Java este practic blocat la Java 7, cu un set specific de Java 8 caracteristici disponibile. Sau puteți trece la utilizarea limbajului de programare Kotlin.
de ce sunt companiile încă blocate pe Java 8?,
există o combinație de diferite motive pentru care companiile sunt încă blocate cu Java 8. Pentru a numi câteva:
- instrumente de construire (Maven, Gradle, etc.) și unele biblioteci au avut inițial bug-uri cu versiunile Java > 8 și actualizările necesare. Chiar și astăzi, de exemplu, Java 9+, anumite instrumente de construire imprimă”acces reflectorizant „-avertismente atunci când construiesc proiecte Java, care pur și simplu” nu se simte gata”, chiar dacă construcțiile sunt în regulă.
- până la Java 8, foloseai destul de mult construcțiile JDK ale Oracle și nu trebuia să-ți pese de licențiere., Oracle a schimbat însă schema de licențiere în 2019, ceea ce a făcut ca Internetul să înnebunească spunând că „Java nu mai este liber” — și a urmat o cantitate corectă de confuzie. Aceasta nu este însă o problemă, despre care veți afla în secțiunea „distribuții Java” din acest ghid. unele companii au politici pentru a utiliza numai versiunile LTS și se bazează pe furnizorii lor de sisteme de operare pentru a le oferi aceste versiuni, ceea ce necesită timp.pentru a rezuma lucrurile, aveți o combinație de probleme practice (actualizarea instrumentelor, bibliotecilor, cadrelor) și probleme politice.,
de ce sunt numite unele versiuni Java 1.X?
versiunile Java înainte de 9 aveau pur și simplu o schemă de denumire diferită. Deci, Java 8 poate fi numit și 1.8, Java 5 poate fi numit 1.5 etc. Când ați emis comanda
java -version
cu aceste versiuni, ați obținut o ieșire ca aceasta:aceasta înseamnă pur și simplu Java 8. Odată cu trecerea la versiuni bazate pe timp cu Java 9, schema de denumire sa schimbat, iar versiunile Java nu sunt prefixate cu 1.x mai. Acum, Numărul versiunii arată astfel:
care este diferența dintre versiunile Java?, Ar trebui să învăț unul Specific?
venind din alte limbaje de programare cu rupturi majore între versiuni, cum ar fi Python 2 la 3, s-ar putea să vă întrebați dacă același lucru este valabil și pentru Java.
Java este special în această privință, deoarece este extrem de compatibil înapoi. Java 5 sau 8 este garantat să ruleze cu o mașină virtuală Java 8-13-cu câteva excepții de care nu trebuie să vă faceți griji deocamdată.în mod evident, nu funcționează invers, spuneți că programul dvs. se bazează pe funcțiile Java 13 care pur și simplu nu sunt disponibile sub un Java 8 JVM.,aceasta înseamnă câteva lucruri:
- nu doar „învățați” o versiune Java specifică, cum ar fi Java 12.
- mai degrabă, veți obține o bază bună în toate funcțiile de limbă până la Java 8.
- și apoi, puteți afla, dintr-un ghid ca acesta, ce caracteristici suplimentare au venit în Java 9-13 și să le utilizați ori de câte ori puteți.
care sunt exemple de aceste noi caracteristici între versiunile Java?
aruncați o privire la secțiunea „Java Features 8-13” de mai jos.,
dar, ca regulă generală: ciclurile de lansare mai vechi, mai lungi (3-5 ani, până la Java 8) au însemnat o mulțime de funcții noi pe lansare.
ciclul de lansare de șase luni înseamnă mai puține caracteristici pe lansare, astfel încât să puteți recupera rapid funcțiile limbajului Java 9-13.
care este diferența dintre un JRE și un JDK?
până acum, am vorbit doar despre ” Java.”Dar ce este Java exact?
În primul rând, trebuie să diferențiați între un JRE (Java Runtime Environment) și un JDK (Java Development Kit).,din punct de vedere istoric, ați descărcat doar un JRE dacă ați fost interesat doar de rularea programelor Java. Un JRE include, printre altele, mașina virtuală Java (JVM) și instrumentul de linie de comandă „java”.pentru a dezvolta noi programe Java, trebuia să descărcați un JDK. Un JDK include tot ce JRE-a, precum și compilator
javac
și o serie de alte instrumente, cum ar fijavadoc
(Java documentația generator) șijdb
(Java Debugger).acum de ce vorbesc în trecut?,
până la Java 8, site — ul Oracle a oferit JREs și JDKs ca descărcări separate-chiar dacă JDK a inclus întotdeauna un JRE într-un folder separat. Cu Java 9, această distincție a dispărut practic și descărcați întotdeauna un JDK. Structura de directoare a JDKs sa schimbat, de asemenea, fără a mai avea un dosar JRE explicit.deci ,chiar dacă unele distribuții (vezi secțiunea „distribuții Java”) oferă încă o descărcare JRE separată, se pare că există tendința de a oferi doar un JDK. Prin urmare, vom folosi Java și JDK interschimbabil de acum încolo.,
Cum instalez Java sau un JDK atunci?
ignorați imaginile Java-Docker,.ambalaje msi sau pachete specifice platformei pentru moment. În cele din urmă, Java este doar un .fișier zip; nimic mai mult, nimic mai puțin.
prin urmare, tot ce trebuie să faceți pentru a instala Java pe computer este să dezarhivați JDK-{5-13}.fișier zip. Nici măcar nu aveți nevoie de drepturi de administrator pentru asta.,fișierul java dezarhivat va arăta astfel:
magia se întâmplă în directorul/bin, care sub Windows, arată astfel:
Directory C:\dev\jdk-11\bin...12.11.2019 19:23 272.736 java.exe...12.11.2019 19:23 20.832 javac.exe...
deci tot ce trebuie să faceți este să dezarhivați acel fișier și să puneți directorul / bin în variabila PATH, astfel încât să puteți apela comanda „java” de oriunde.
(În cazul în care vă întrebați, instalatorii GUI precum cel de la Oracle sau AdoptOpenJDK vor face dezarhivarea și modificarea variabilei PATH pentru dvs., cam asta este.,)
pentru a verifica dacă ați instalat corect Java, puteți rula pur și simplu
java -version
. Dacă ieșirea arată ca cea de mai jos, sunteți bine să mergeți!acum, a mai rămas o întrebare: de unde obțineți Java .fișier zip de la? Ceea ce ne aduce la subiectul distribuțiilor.există o varietate de site-uri care oferă descărcări Java (citiți: JDK) și nu este clar „cine oferă CE și cu ce licențiere”. Această secțiune va arunca o lumină în acest sens.,
proiectul OpenJDK
În ceea ce privește codul sursă Java (citiți: codul sursă pentru JRE / JDK), există un singur loc pe site-ul proiectului OpenJDK.
acesta este doar codul sursă, cu toate acestea, nu un build distribuibil (cred că: ta .fișier zip cu comanda java compilată pentru sistemul dvs. de operare specific). În teorie, tu și cu mine am putea produce o construcție din acel cod sursă, să-l numim, să zicem, MarcoJDK, și să începem să-l distribuim. Dar distribuția noastră nu ar avea certificare, pentru a putea să ne numim legal Java SE compatibil.,de aceea, în practică, există o mână de furnizori care creează aceste construcții, le certifică (vezi TCK) și apoi le distribuie.
și în timp ce vânzătorii nu pot, să zicem, să elimine o metodă din clasa String înainte de a produce o nouă construcție Java, ei pot adăuga branding (yay!) sau adăugați alte utilități (de exemplu, CLI) pe care le consideră utile. Dar, în afară de asta, codul sursă original este același pentru toate distribuțiile Java.
OpenJDK construiește (de Oracle) și OracleJDK construiește
unul dintre furnizorii care construiește Java de la sursă este Oracle., Acest lucru duce la două distribuții Java diferite, care pot fi foarte confuze la început.OpenJDK construiește de Oracle(!). Aceste versiuni sunt gratuite și fără marcă, dar Oracle nu va lansa actualizări pentru versiunile mai vechi, să zicem Java 13, de îndată ce va apărea Java 14.
- OracleJDK, care este o marcă comercială, care începe cu schimbarea licenței în 2019. Aceasta înseamnă că poate fi utilizat gratuit în timpul dezvoltării, dar trebuie să plătiți Oracle dacă îl utilizați în producție. Pentru aceasta, beneficiați de asistență mai lungă, adică actualizări ale versiunilor și un număr de telefon pe care îl puteți apela dacă JVM-ul dvs. înnebunește.,
Acum, din punct de vedere istoric (pre-Java 8), au fost reală sursă de diferențe între OpenJDK construiește și OracleJDK construiește, în cazul în care ai putea spune că OracleJDK a fost „mai bine”. Dar, începând de astăzi, ambele versiuni sunt în esență aceleași, cu diferențe minore.
apoi se reduce la tine doresc plătit, suport comercial (un număr de telefon) pentru versiunea Java instalat.în 2017, Un grup de membri ai grupului de utilizatori Java, dezvoltatori și furnizori (Amazon, Microsoft, Pivotal, Red Hat și alții) a început o comunitate numită AdoptOpenJDK.,acestea oferă OpenJDK gratuit, solid, cu disponibilitate/actualizări mai lungi și chiar vă oferă posibilitatea de a alege două mașini virtuale Java diferite: HotSpot și OpenJ9.
am foarte recomandat dacă sunteți în căutarea de a instala Java.
Azul Zulu, Amazon Corretto, SAPMachine
veți găsi o listă completă a OpenJDK construiește la OpenJDK Wikipedia site-ul. Printre acestea se numără Azul Zulu, Amazon Corretto, precum și SapMachine, pentru a numi câteva. Pentru a simplifica prea mult, se reduce la faptul că aveți diferite opțiuni de asistență / garanții de întreținere.,
dar asigurați-vă că verificați site-urile individuale pentru a afla despre avantajele fiecărei distribuții.
recomandare
caracteristici Java 8-13
așa cum sa menționat la începutul acestui ghid: în esență, toate (nu fi pretentios acum) Java 8 caracteristici de limbă de lucru în Java 13. Același lucru este valabil și pentru toate celelalte versiuni Java între ele.
la rândul său, acest lucru înseamnă că toate caracteristicile limbajului din Java 8 servesc ca o bună cunoaștere a bazei Java, iar orice altceva (Java 9-13) este destul de mult caracteristici suplimentare pe lângă linia de bază.,
Iată o scurtă prezentare a versiunilor specifice:
Java 8
Java 8 a fost o versiune masivă și puteți găsi o listă cu toate caracteristicile pe site-ul Oracle. Există două seturi de caracteristici principale pe care aș dori să le menționez aici:
caracteristici de limbă: Lambda, etc.,
Înainte de Java 8, ori de câte ori ai vrut să instantia, de exemplu, un nou Runnable, a trebuit să scrie o clasă internă anonimă, astfel:
Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } };
Cu lambda, același cod arată astfel:
Runnable runnable = () -> System.out.println("Hello world two!");
Ai, de asemenea, metoda de referințe, repetând adnotări, default metode pentru interfețe, și câteva alte caracteristici de limbă.
Collections & Streams
în Java 8, aveți, de asemenea, operații în stil funcțional pentru colecții, cunoscute și sub numele de API-ul Stream., Un exemplu rapid:
List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");
acum, pre-Java 8, practic a trebuit să scrieți pentru-loops pentru a face ceva cu acea listă.
Cu Fluxuri de API, puteți face următoarele:
list.stream() .filter(name -> name.startsWith("f")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);
Java 9
Java 9, de asemenea, a fost un destul de mare de presă, cu câteva completări:
Colecții
Colecții primit o serie de noi metode de helper pentru a construi cu ușurință Liste, Seturi, și Hărți.,
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);
Interfețe
Interfaces-au private
metode:
public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); }}
Altă Limbă Caracteristici
Și o serie de alte îmbunătățiri, ca o îmbunătățire a încerca-cu-resurse declarație sau diamant operator de extensii.în cele din urmă, Java a primit un shell în care puteți încerca comenzi simple și puteți obține rezultate imediate.
% jshell| Welcome to JShell -- Version 9| For an introduction type: /help introjshell> int x = 10x ==> 10
HTTPClient
Java 9-a adus inițială versiune preview al unui nou HttpClient
., Până atunci, suportul Http încorporat al Java era destul de scăzut și a trebuit să reveniți la utilizarea bibliotecilor terțe precum Apache HttpClient sau OkHttp (care sunt biblioteci grozave, btw!).cu Java 9, Java a primit propriul client modern — deși acesta este în modul de previzualizare, ceea ce înseamnă că poate fi modificat în versiunile Java ulterioare.
Project Jigsaw: module Java și fișiere Jar cu mai multe versiuni
Java 9 a primit sistemul de module Jigsaw, care seamănă oarecum cu vechea specificație OSGI., Nu este în domeniul de aplicare al acestui ghid pentru a intra în detalii complete pe Jigsaw, dar au o privire la link-urile anterioare pentru a afla mai multe.
Multi-lansare .fișierele jar au făcut posibilă existența unuia .fișier jar care conține diferite clase pentru diferite versiuni JVM. Deci, programul dvs. se poate comporta diferit/au clase diferite utilizate atunci când rulează pe Java 8 Vs.Java 10, de exemplu.
Java 10
au existat câteva modificări la Java 10, cum ar fi colectarea gunoiului etc., Dar singura schimbare reală pe care o veți vedea probabil ca dezvoltator este introducerea cuvântului cheie var
, numit și inferență de tip local-variabilă.
Local-Variable Type Inference: var-cuvinte cheie
// Pre-Java 10String myName = "Marco";// With Java 10var myName = "Marco"
se simte Javascript-y, nu-i așa? Este încă puternic tastat, deși, și se aplică numai variabilelor din interiorul metode (mulțumesc, dpash, pentru subliniind că din nou).
Java 11
Java 11 a fost, de asemenea, o versiune ceva mai mică, din perspectiva dezvoltatorului.,
Siruri de caractere & Fișiere
Sfori și fișiere luat o pereche de metode noi (nu toate enumerate aici):
Run Fișiere Sursă
Incepand cu Java 10, puteți rula fișiere sursă Java, fără a fi nevoie pentru a compila-le mai întâi. Un pas spre scripting.
ubuntu@DESKTOP-168M0IF:~$ java MyScript.java
Locale-Variabilă de Tip Inferență (var) pentru Parametrii Lambda
antet spune totul:
(var firstName, var lastName) -> firstName + lastName
HttpClient
HttpClient
de la Java 9 în final, non-versiune preview.,alte bunătăți înregistrator de zbor, colector de gunoi No-Op, Nashorn-Javascript-motor depreciat, etc.Java 12 a primit câteva caracteristici noi și curățări, dar singurele care merită menționate aici sunt suportul Unicode 11 și o previzualizare a noii expresii switch, pe care o veți vedea acoperită în secțiunea următoare.
Java 13
puteți găsi o listă completă de caracteristici aici, dar, în esență, primiți Unicode 12.,1 suport, precum și două caracteristici noi sau îmbunătățite de previzualizare (care pot fi modificate în viitor):
Expresie comutator (previzualizare)
expresii comutator poate reveni acum o valoare., Și vă puteți folosi un lambda-stil sintaxa pentru expresii, fără a cădea-prin/pauză probleme:
comutator Vechi declarațiile arata ca aceasta:
switch(status) { case SUBSCRIBER: // code block break; case FREE_TRIAL: // code block break; default: // code block}
în timp ce cu Java 13, declarații de comutare poate arata astfel:
Multiline Siruri de caractere (Preview)
în cele din urmă puteți face acest lucru în Java:
Java 14 și, mai Târziu,
Vor fi acoperite de aici, de îndată ce acestea sunt eliberat. Verificați din nou în curând!,
concluzie
până acum, ar trebui să aveți o imagine de ansamblu destul de bună a câtorva lucruri:
- cum se instalează Java, ce Versiune să obțineți și de unde să o obțineți (sugestie: AdoptOpenJDK).
- ce este o distribuție Java, care există și care sunt diferențele.
- care sunt diferențele dintre versiunile Java specifice.
Feedback-ul, corecțiile și introducerea aleatorie sunt întotdeauna binevenite! Pur și simplu lăsați un comentariu mai jos.
Vă mulțumim pentru lectură!
există mai multe în cazul în care a venit de la
Acest articol a apărut inițial pe www.marcobehler.,com / scris ca parte a unei serii de ghiduri privind programarea Java modernă. Pentru a găsi mai multe ghiduri, vizitați site-ul web sau abonați-vă la newsletter pentru a primi notificări despre ghidurile nou publicate: https://bit.ly/2K0Ao4F.
mulțumiri
Stephen Colebourne a scris un articol fantastic despre diferitele distribuții Java disponibile. Mulțumesc, Stephen!
Lectură suplimentară
studiul ecosistemului JVM: de ce Dev-urile nu trec la Java 11
dincolo de Java 8
când va înlocui Java 11 Java 8 ca Java implicit?