Guide til Java-versioner og funktioner

Guide til Java-versioner og funktioner

Java 8, Java 11, Java 13-Hvad er forskellen?

Du kan bruge denne vejledning til at finde og installere den nyeste Java, forstå forskellene mellem Java-distributioner (AdoptOpenJdk, OpenJDK, OracleJDK osv.), samt få et overblik over Java-sprogfunktioner, herunder Java-versioner 8-13.,

du kan også lide: ud over Java 8

baggrundsinformation

lad os først se på nogle almindelige, praktiske spørgsmål, som folk har, når de prøver at vælge den rigtige Java-version til deres projekt.

Hvis du vil lære mere om en bestemt version, skal du gå til AdoptOpenJDK-siteebstedet, vælge den nyeste Java-version, Do .nloade og installere den. Så kom tilbage til denne vejledning til og lær stadig en ting eller to om forskellige Java-versioner.

hvilken Java-Version skal jeg bruge?,

fra September 2019 er Java 13 Den seneste udgivne Java — version med nyere versioner, der følger hver 6.måned-Java 14 er planlagt til marts 2020, Java 15 for September 2020 og så videre. Tidligere var Java-udgivelsescyklusser meget længere, op til 3-5 år!.

da mange nye versioner kommer ud, er der dybest set disse brugsscenarier i den virkelige verden:

  • ældre projekter i virksomheder sidder ofte fast ved hjælp af Java 8 (se “hvorfor sidder virksomheder stadig fast på Java 8?”afsnittet nedenfor). Således bliver du også tvunget til at bruge Java 8.,
  • nogle ældre projekter sidder endda fast på Java 1.5 (udgivet 2004) eller 1.6 (udgivet 2006) — beklager, venner!
  • hvis du sørger for at bruge de nyeste ide ‘ er, rammer og bygge værktøjer og starte et greenfield-projekt, kan du uden tøven bruge Java 11 (LTS) eller endda den nyeste Java 13.
  • Der er det specielle felt for Android-udvikling, hvor Java-versionen stort set sidder fast på Java 7, Med et specifikt sæt Java 8-funktioner til rådighed. Eller du kan skifte til at bruge Kotlin programmeringssprog.

Hvorfor sidder virksomheder stadig fast på Java 8?,

Der er en blanding af forskellige grunde til, at virksomheder stadig sidder fast med Java 8. For at nævne nogle få:

  • Byg værktøjer (Maven, Gradle osv.) og nogle biblioteker havde oprindeligt fejl med versioner Java versioner > 8 og nødvendige opdateringer. Java 9+, udskriver visse byggeværktøjer”reflekterende adgang “-advarsler ved opbygning af Java-projekter, som simpelthen” føles ikke klar”, selvom bygningerne er fine. indtil Java 8 brugte du stort set Oracle ‘ s JDK builds, og du behøvede ikke at bekymre dig om licens., Oracle ændrede licensordningen i 2019, hvilket fik internettet til at blive vanvittigt og sagde “Java er ikke Gratis mere — – og en hel del forvirring fulgte. Dette er dog ikke rigtig et problem, som du vil lære om i afsnittet “Java distributioner” i denne vejledning. nogle virksomheder har politikker til kun at bruge LTS-versioner og stole på deres OS-leverandører for at give dem disse builds, hvilket tager tid.

for at opsummere tingene har du en blanding af praktiske problemer (opgradering af dine værktøjer, biblioteker, rammer) og politiske problemer.,

Hvorfor kaldes nogle Java-versioner 1.X?

Java-versioner før 9 havde simpelthen et andet navneskema. Så Java 8 kan også kaldes 1.8, Java 5 kan kaldes 1.5 osv. Når du udstedte kommandoen java -version med disse versioner, fik du et output som dette:

dette betyder blot Java 8. Med skiftet til tidsbaserede udgivelser med Java 9 ændres navneskemaet også, og Java-versioner er ikke præfikset med 1.anymore længere. Nu ser versionsnummeret sådan ud:

Hvad er forskellen mellem Java-versioner?, Skal jeg lære en bestemt?

kommer fra andre programmeringssprog med store brud mellem udgivelser, som siger Python 2 til 3, kan du undre dig over, om det samme gælder Java.

Java er speciel i denne henseende, da den er ekstremt bagudkompatibel. Det betyder, at dit Java 5 eller 8-program er garanteret at køre med en Java 8-13 virtuel maskine-med nogle få undtagelser behøver du ikke bekymre dig om for nu.

det virker naturligvis ikke omvendt, siger, at dit program er afhængig af Java 13-funktioner, der simpelthen ikke er tilgængelige under en Java 8 JVM.,

dette betyder et par ting:

  • du “lærer” ikke bare en bestemt Java-version, som Java 12.
  • snarere får du et godt fundament i alle sprogfunktioner indtil Java 8.
  • og så kan du lære af en guide som denne, hvilke ekstra funktioner der kom i Java 9-13 og bruge dem, når du kan.

Hvad er eksempler på disse nye funktioner mellem Java-versioner?

se afsnittet “Java Features 8-13” nedenfor.,

men som en tommelfingerregel: de ældre, længere udgivelsescyklusser (3-5 år, indtil Java 8) betød en masse nye funktioner pr.

den seks måneders udgivelsescyklus betyder færre funktioner pr.udgivelse, så du hurtigt kan indhente Java 9-13 sprogfunktioner.

Hvad er forskellen mellem en JRE og en JDK?

indtil nu har vi kun talt om “Java.”Men hvad er Java nøjagtigt?

først skal du skelne mellem et JRE (Java Runtime Environment) og et JDK (Java Development Kit).,historisk set do .nloadede du bare en JRE, hvis du kun var interesseret i at køre Java-programmer. En JRE inkluderer blandt andet Java Virtual Machine (JVM) og kommandolinjeværktøjet “java”.

for at udvikle nye Java-programmer skulle du Do .nloade en JDK. En JDK indeholder alt, hvad JRE har, samt kompilatoren javac og et par andre værktøjer som javadoc (Java documentation generator) og jdb (Java Debugger).

nu hvorfor taler jeg i tidligere tid?,indtil Java 8 tilbød Oracle-websiteebstedet JREs og JDK ‘ er som separate do .nloads — selvom JDK også altid inkluderede en JRE i en separat mappe. Med Java 9 var denne sondring dybest set væk, og du Do .nloader altid en JDK. Mappestrukturen af JDKs også ændret, med ikke at have en eksplicit JRE mappe længere.

så selvom nogle distributioner (se afsnittet “Java-distributioner”) stadig tilbyder en separat JRE-do .nload, ser det ud til at være tendensen med at tilbyde bare en JDK. Derfor vil vi bruge Java og JDK i flæng fra nu af.,

Hvordan installerer jeg Java eller en JDK så?

Ignorer Java-Docker-billederne, .msi wrarappers, eller platform-specifikke pakker for øjeblikket. I sidste ende er Java bare en .zipip-fil; intet mere, intet mindre.

derfor er alt, hvad du skal gøre for at installere Java på din maskine, at pakke din jdk-{5-13} ud.zipip-fil. Du behøver ikke engang administratorrettigheder til det.,

Din udpakkede Java-fil vil se ud som dette:

Det magiske der sker i /bin mappen, som under Windows, ser ud som dette:

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

Så alt du skal gøre er at udpakke filen, og læg den /bin mappen i din PATH-variabel, så du kan kalde ‘java’ – kommandoen fra hvor som helst.

(Hvis du undrer dig, vil GUI-installatører som den fra Oracle eller AdoptOpenJDK gøre un .ipping og ændre sti-Variablen for dig, det handler om det.,)

for at bekræfte, at du har installeret Java korrekt, kan du derefter blot køre java -version. Hvis output ligner den nedenfor, er du god til at gå!

nu er der et spørgsmål tilbage: Hvor får du den Java .zipip-fil fra? Hvilket bringer os til emnet distributioner.

Java-Distributioner

Der er en række websteder, der tilbyder Java (læs: JDK) downloads, og det er uklart”, der tilbyder hvad og med hvilke licenser”. Dette afsnit vil kaste lys over dette.,

OpenJDK-projektet

Med hensyn til Java-kildekode (Læs: kildekoden til din JRE / JDK) er der kun en, der bor på OpenJDK-projektstedet.

Dette er bare kildekode, dog ikke en distribuerbar build (tænk: din .compiledip-fil med den kompilerede java-kommando til dit specifikke operativsystem). I teorien kunne du og jeg producere en build fra den kildekode, kalde det, sige, MarcoJDK, og begynde at distribuere den. Men vores distribution ville mangle certificering for at være i stand til lovligt at kalde os Java SE-kompatible.,derfor er der i praksis en håndfuld leverandører, der rent faktisk opretter disse builds, får dem certificeret (se TCK) og distribuerer dem derefter.

og mens leverandører ikke kan sige, fjerne en metode fra Strengklassen, før de producerer en ny Java-build, kan de tilføje branding (yay! CLI) hjælpeprogrammer, de finder nyttige. Men bortset fra det er den originale kildekode den samme for alle Java-distributioner.

OpenJDK Bygger (Oracle) og OracleJDK Bygger

En af de leverandører, der bygger Java fra kilden er Oracle., Dette fører til to forskellige Java-distributioner, som kan være meget forvirrende i starten.

  1. OpenJDK bygger af Oracle(!). Disse bygger er gratis og ikke-brandede, men Oracle frigiver ikke opdateringer til ældre versioner, siger Java 13, så snart Java 14 kommer ud.
  2. OracleJDK, som er en branded, kommerciel bygning, der starter med licensændringen i 2019. Det betyder, at det kan bruges gratis under udvikling, men du skal betale Oracle, hvis du bruger det i produktionen. Til dette får du længere support, dvs.opdateringer til versioner og et telefonnummer, du kan ringe til, hvis din JVM bliver skør.,

nu, Historisk (pre-Java 8), var der faktiske kildeforskelle mellem OpenJDK builds og OracleJDK builds, hvor man kunne sige, at OracleJDK var ‘bedre’. Men fra i dag, begge versioner er stort set de samme, med mindre forskelle.

det koger derefter ned til dig, der ønsker betalt, kommerciel support (et telefonnummer) til din installerede Java-version.

AdoptOpenJDK

i 2017 startede en gruppe Java-Brugergruppemedlemmer, udviklere og leverandører (Ama .on, Microsoft, Pivotal, Red Hat og andre) et samfund kaldet AdoptOpenJDK.,

de giver gratis, bundsolid OpenJDK bygger med længere tilgængelighed / opdateringer og endda tilbyde dig valget mellem to forskellige Java virtuelle maskiner: HotSpot og OpenJ9.

Jeg kan varmt anbefales, hvis du ønsker at installere Java.

A .ululuulu, Ama .on Corretto, SAPMachine

du finder en komplet liste over OpenJDK-builds på OpenJDK .ikipedia-.ebstedet. Blandt dem er A .ululuulu, Ama .on Corretto, såvel som SapMachine, for at nævne nogle få. For at forenkle det koger det ned til, at du har forskellige supportmuligheder/vedligeholdelsesgarantier.,

men sørg for at tjekke de enkelte websebsteder for at lære om fordelene ved hver enkelt distribution.

anbefaling

Java-funktioner 8-13

Som nævnt i begyndelsen af denne vejledning: stort set alle (vær ikke betyder Nu) Java 8 sprogfunktioner fungerer i Java 13. Det samme gælder for alle andre Java-versioner derimellem.

til gengæld betyder det, at alle sprogfunktioner fra Java 8 fungerer som en god Java-basiskendskab, og alt andet (Java 9-13) er stort set ekstra funktioner oven på denne baseline.,

Her er et hurtigt overblik over, hvilke specifikke versioner der er at tilbyde:

Java 8

Java 8 var en massiv udgivelse, og du kan finde en liste over alle funktioner på Oracle-websiteebstedet. Der er to hovedfunktionssæt, som jeg gerne vil nævne her:

sprogfunktioner: Lambdas osv.,

Før Java 8, når du ønsker at instantiere, for eksempel, en ny Runnable, du var nødt til at skrive en anonym indre klasse, som så:

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

Med lambdas, den samme kode, som ser ud som dette:

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

Du fik også en metode referencer, gentage anmærkninger, standard metoder til brugergrænseflader, og et par andre sprog funktioner.

samlinger& Streams

i Java 8 fik du også funktionelle operationer til samlinger, også kendt som Stream API., Et hurtigt eksempel:

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

nu, før Java 8, måtte du dybest set skrive for-loops for at gøre noget med denne liste.

Med Streams API kan du gøre følgende:

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

Java 9

Java 9 var også en ret stor udgivelse med et par tilføjelser:

samlinger

samlinger fik et par nye hjælpemetoder til nemt at konstruere lister, sæt og kort.,

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);

grænseflader

grænseflader fik private metoder:

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

andre sprogfunktioner

og et par andre forbedringer, som en forbedret try-resourcesith-resources-erklæring eller Diamond operator e .tensions.

JShell

endelig fik Java en shell, hvor du kan prøve enkle kommandoer og få øjeblikkelige resultater.

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

HTTPClient

Java 9 bragte den første preview-version af et nyt HttpClient., Indtil da var Javas indbyggede http-support temmelig lavt niveau, og du var nødt til at falde tilbage på at bruge tredjepartsbiblioteker som Apache HttpClient eller OkHttp (som er gode biblioteker, BT!!).

med Java 9 fik Java sin egen, moderne klient — selvom dette er i previe. – tilstand, hvilket betyder, at det kan ændres i senere Java-versioner.

projekt Jigsa.: Java-moduler og multi-Release Jar-filer

Java 9 fik Jigsa. – modulsystemet, der ligner den gode gamle OSGi-specifikation., Det er ikke inden for rammerne af denne vejledning at gå i detaljer om Jigsa., men se på de foregående links for at lære mere.

Multi-Release .jar-filer gjorde det muligt at have en .jar-fil, der indeholder forskellige klasser for forskellige JVM-versioner. Så dit program kan opføre sig anderledes / have forskellige klasser, der bruges, når du kører på Java 8 vs. Java 10, for eksempel.

Java 10

der har været et par ændringer til Java 10, som garbage collection osv., Men den eneste reelle ændring, du som udvikler sandsynligvis vil se, er introduktionen af var nøgleord, også kaldet lokal-variabel type inferens.

lokal-variabel type inferens: var-søgeord

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

føles Javascript-y, ikke? Det er dog stadig stærkt skrevet og gælder kun for variabler inde i metoder (tak, dpash, for at påpege det igen).

Java 11

Java 11 var også en noget mindre udgivelse, fra et udviklerperspektiv.,

Strings & Files

Strings and files fik et par nye metoder (ikke alle anført her):

Kør kildefiler

start med Java 10, kan du køre Java kildefiler uden at skulle kompilere dem først. Et skridt mod scripting.

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

den Lokale Variabel Type Inferens (var) Lambda Parametre

overskriften siger det hele:

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

HttpClient

HttpClient fra Java 9 i sin endelige, ikke-preview version.,

andre godbidder

Flight Recorder, No-op Garbage Collector, Nashorn-Javascript-motor forældet osv.

Java-12

Java-12 fik et par nye funktioner og clean-ups, men kun dem, der er værd at nævne her, er Unicode-11-understøttelse og en forsmag på den nye switch udtryk, som du vil se dækket i næste afsnit.

Java 13

Du kan finde en komplet funktionsliste her, men i det væsentlige får du Unicode 12.,1 support, samt to nye eller forbedrede previe. – funktioner (kan ændres i fremtiden):

s .itch e .pression (Previe.)

S .itch udtryk kan nu returnere en værdi., Og du kan bruge en syntaks i lambda-stil til dine udtryk uden problemer med at falde igennem/bryde:

Gamle s Olditch-udsagn så sådan ud:

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

hvorimod med Java 13 Kan s :itch-udsagn se sådan ud:

Multiline Strings (Previe:)

Du kan endelig gøre dette ved at i Java:

Java 14 og senere

vil blive dækket her, så snart de bliver frigivet. Kom snart tilbage!,

konklusion

nu skal du have et ret godt overblik over et par ting:

  • Sådan installeres Java, hvilken version der skal hentes, og hvor man kan hente den fra (tip: AdoptOpenJDK).
  • hvad en Java-distribution er, hvilke der findes, og hvad er forskellene.
  • hvad er forskellene mellem specifikke Java-versioner.

Feedback, korrektioner og tilfældige input er altid velkomne! Du skal blot efterlade en kommentar nedenunder.

tak for læsning!

der er mere, hvor det kom fra

Denne artikel blev oprindeligt vist på….marcobehler.,com / skrevet som en del af en række vejledninger om moderne Java programmering. For at finde flere guider kan du besøge hjemmesiden eller abonnere på nyhedsbrevet for at få besked om nyligt offentliggjorte guider: https://bit.ly/2K0Ao4F.

anerkendelser

Stephen Colebourne skrev en fantastisk artikel om de forskellige tilgængelige Java-distributioner. Tak, Stephen!

yderligere læsning

JVM Ecosystem Survey: hvorfor Devs ikke skifter til Java 11

ud over Java 8

hvornår erstatter Java 11 Java 8 Som standard Java?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *