Du kan bruke denne veiledningen for å finne og installere den siste versjonen av Java, forstå forskjellene mellom Java-distribusjoner (AdoptOpenJdk, OpenJDK, OracleJDK, etc.), samt få en oversikt over Java-språket funksjoner, inkludert Java versjoner 8-13.,
Du kan også gjerne: Utover Java 8
Bakgrunnsinformasjon
Først, la oss ta en titt på noen vanlige, praktiske spørsmål som folk har når du prøver å velge den rette Java-versjon for sitt prosjekt.
Hvis du ønsker å lære mer om et bestemt versjon, kan du gå til AdoptOpenJDK nettstedet, velger du den siste versjonen av Java, laste ned og installere den. For så å komme tilbake til denne håndboken, og fortsatt lære en ting eller to om forskjellige Java-versjoner.
Hva Java-Versjonen Skal jeg Bruke?,
Som av September 2019, Java 13 er den nyeste utgitt Java-versjonen, med nyere versjoner følgende hver 6 måneder — Java-14 er planlagt for Mars 2020, Java 15 September 2020, og så videre. I det siste, Java utgivelsen sykluser var mye lenger, opp til 3-5 år!.
Med at mange nye versjoner kommer ut, det er i utgangspunktet disse virkelige bruk scenarier:
- Legacy-prosjekter i bedrifter er ofte fast ved hjelp av Java-8 (se «Hvorfor Er Selskaper Fortsatt Fast På Java-8?»nedenfor). Dermed, vil du bli tvunget til å bruke Java 8 også.,
- Noen eldre prosjekter er selv fast på Java 1.5 (utgitt 2004) eller 1.6 (utgitt 2006) — beklager, kamerater!
- Hvis du er å sørge for å bruke den aller siste IDEs, rammeverk, og bygge verktøy og starte en greenfield prosjektet, kan du, uten å nøle, bruker Java-11 (LTS) eller til og med den siste versjonen av Java 13.
- Det er spesielt felt av Android utvikling der Java-versjonen er i utgangspunktet fast på Java 7, med et bestemt sett av Java 8 funksjoner tilgjengelig. Eller, du kan bytte til å bruke den Kotlin programmeringsspråk.
Hvorfor Er Selskaper Fortsatt Fast på Java-8?,
Det er en blanding av forskjellige grunner selskaper er fortsatt stuck med Java-8. For å nevne noen:
- Bygge verktøy (Maven, Gradle, etc.) og noen biblioteker i utgangspunktet hadde feil med Java-versjoner versjoner > 8 og behov for oppdateringer. Selv i dag, med for eksempel Java-9+, visse bygge verktøy skrive ut «reflekterende access»-advarsler når du bygger Java-prosjekter, som rett og slett «føler seg ikke klar», selv om den bygger er fine.
- Opp til Java 8, du var ganske mye ved hjelp av Oracle ‘ s JDK som bygger og du ikke trenger å bry seg om lisensiering., Oracle endret konsesjonsordningen i 2019, selv om, som fikk Internett til å gå gale, og sa: «Java er ikke gratis lenger» — og en god del forvirring følges. Dette er, imidlertid, ikke egentlig et problem, som du vil lære om i «Java-Distribusjoner» – delen i denne veiledningen.
- Noen selskaper har retningslinjer for å bare bruke LTS-versjoner og stole på deres OS leverandører for å gi dem disse bygger, som tar tid.
for Å oppsummere ting opp, har du en blanding av praktiske problemer (oppgradere dine verktøy, biblioteker, rammer) og politiske spørsmål.,
Hvorfor Er Noen Java-Versjoner Kalt 1.X?
Java-versjoner før 9 hadde rett og slett en annen navneordning. Så, Java 8 kan også bli kalt 1.8, Java 5 kan kalles 1.5, etc. Når du har utstedt java -version
– kommandoen med disse versjonene, har du en utskrift som dette:
Dette betyr helt enkelt Java-8. Med overføring til annen-baserte utgivelser med Java-9, navneordning også endret seg, og Java-versjoner er ikke innledes med 1.x lenger. Nå, versjonsnummeret ser ut som dette:
Hva Er Forskjellen Mellom Java-Versjoner?, Bør jeg Lære en Bestemt?
som Kommer fra andre programmeringsspråk med store brekkasje mellom utgivelsene, som sier Python 2 til 3, du kanskje lurer på om det samme gjelder for Java.
Java er spesiell i denne sammenheng, da det er ekstremt bakover-kompatibel. Dette betyr at din Java-5 eller 8 program som er garantert å kjøre med en Java 8-13 Virtuell Maskin — med et par unntak, trenger du ikke å bekymre deg for nå.
Det åpenbart ikke fungerer den andre veien rundt, sier programmet baserer seg på Java-13 funksjoner som er rett og slett ikke tilgjengelig under et Java-8 JVM.,
Dette betyr et par ting:
- har Du ikke bare «lære» en bestemt Java-versjon, som Java-12.
- Snarere, vil du få et godt grunnlag i alle språk har opp til Java-8.
- Og deretter, du kan lære fra en guide som dette, hvilke andre funksjoner kom i Java 9-13 og bruke dem når du kan.
Hva Er Eksempler på Disse Nye Funksjonene Mellom Java-Versjoner?
ta en titt på «Java Har 8-13» nedenfor.,
Men som en tommelfingerregel: Jo eldre, lengre versjon-sykluser (3-5 år, inntil Java 8) menes en masse nye funksjoner per utgivelse.
seks måneders utgivelsen syklus betyr færre funksjoner per utgivelse, slik at du kan fange opp raskt på Java 9-13 språket har.
Hva Er Forskjellen Mellom en JRE og en JDK?
inntil nå har vi bare snakket om «Java.»Men hva er Java, egentlig?
Først må du skille mellom en JRE (Java Runtime Environment) og en JDK (Java Development Kit).,
Historisk, du lastet ned bare en JRE hvis du var bare interessert i å kjøre Java-programmer. En JRE inkluderer, blant annet, Java Virtual Machine (JVM) og «java» command-line verktøy.
for Å utvikle nye Java-programmer, du trenger å laste ned en JDK. En JDK som inkluderer alt JRE har, så vel som kompilatoren javac
og et par andre verktøy som javadoc
(Java dokumentasjon generator) og jdb
(Java Feilsøkingsprogrammet).
Nå hvorfor snakker jeg i fortid?,
inntil Java 8, Oracle hjemmeside som tilbys JREs og JDKs som separate nedlastinger — selv om JDK også alltid inkludert et JRE i en egen mappe. Med Java-9, som skillet var i utgangspunktet er borte, og du er alltid laste ned en JDK. Katalogstrukturen på JDKs også endret, med ikke å ha en eksplisitt JRE mappen lenger.
Så, selv om noen distribusjoner (se «Java-Distribusjoner» – delen) fortsatt tilby en egen JRE laste ned, ser det ut til å være trenden for å tilby bare en JDK. Derfor, vi kommer til å bruke Java JDK om hverandre fra nå av.,
Hvordan Installerer jeg Java eller en JDK Da?
Ignorere Java-Docker bilder .msi pakkere, eller plattform-spesifikke pakker for øyeblikket. I slutten Java er bare en .zip-fil, og ingenting mer, ingenting mindre.
Derfor, alt du trenger å gjøre for å installere Java på din maskin er å pakke din jdk-{5-13}.zip-fil. Du trenger ikke engang administrator-rettigheter for det.,
den utpakkede Java-fil vil se ut som dette:
magien skjer i /bin-katalogen, som under Windows, ser ut 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 trenger å gjøre er å pakke ut filen og sette /bin-katalogen i PATH-variabelen, så kan du ringe ‘java’ – kommandoen fra hvor som helst.
(I tilfelle du lurer på, GUI montører som en fra Oracle eller AdoptOpenJDK vil gjøre unzipping og endre PATH-variabelen for deg, det er om det.,)
for Å bekrefte at du har installert Java på riktig måte, kan du bare kjøre java -version
. Hvis resultatet ser ut som den under, er du god til å gå!
Nå, det er ett spørsmål igjen: Hvor får du som Java .zip-fil fra? Hvilket bringer oss til temaet distribusjoner.
Java-Distribusjoner
Det er en rekke nettsteder som tilbyr Java (les: JDK) nedlastinger, og det er uklart «hvem som tilbyr hva, og med hvilken lisens». Denne seksjonen vil kaste lys på dette.,
OpenJDK-Prosjektet
I form av Java-kildekoden (les: kildekoden for JRE/JDK), er det bare én som bor på OpenJDK nettsted.
Dette er bare kildekode, men ikke en distribuerbar bygge (tenk: ditt .zip-filen med kompilert java-kommando for operativsystemet du bruker). I teorien, du og jeg kunne lage et bygg fra at kildekoden, kaller det, si, MarcoJDK, og begynne å distribuere det. Men vår distribusjon ville mangle sertifisering, å være i stand til å lovlig kan kalle oss Java SE-kompatibel.,
derfor, i praksis, det er en håndfull leverandører som faktisk skaper disse bygger, få dem sertifisert (se TCK), og deretter distribuere dem.
Og mens leverandører kan si, ta en metode fra String-klassen før produsere en ny Java-bygge, de kan legge til merkevarebygging (yay!) eller legg til noen andre (f.eks. CLI) verktøy de anser som nyttig. Men annet enn det, den originale kildekoden er den samme for alle Java-distribusjoner.
OpenJDK Bygger (Oracle) og OracleJDK Bygger
En av leverandørene som bygger Java fra kilden er Oracle., Dette fører til to forskjellige Java-distribusjoner, som kan være veldig forvirrende.
- OpenJDK versjoner av Oracle(!). Disse versjonene er gratis og uprofilerte, men Oracle vil ikke slippe oppdateringer for eldre versjoner, sier Java-13, som snart Java 14 kommer ut.
- OracleJDK, som er en profilert, kommersielle bygge starter med lisens endring i 2019. Dette betyr at det kan brukes gratis under utvikling, men du må betale for Oracle hvis du bruker det i produksjon. For dette, kan du få støtte lenger, dvs. oppdateringer til versjoner og et telefonnummer du kan ringe hvis din JVM går gale.,
Nå, historisk (pre-Java 8), var det faktiske kilden forskjeller mellom OpenJDK bygger og OracleJDK bygger, der du kan si at OracleJDK var «bedre». Men fra og med i dag, begge versjonene er i hovedsak de samme, med små forskjeller.
Det så koker det ned til deg som ønsker betalt, kommersiell støtte (et telefonnummer) for den installerte versjonen av Java.
AdoptOpenJDK
I 2017, en gruppe av Java User Group medlemmer, utviklere og leverandører (Amazon, Microsoft, Sentrale, Red Hat, og andre) i gang et fellesskap kalt AdoptOpenJDK.,
De gir gratis, rock-solid OpenJDK bygger med lengre tilgjengelighet/oppdateringer og selv tilby deg valget av to forskjellige Java Virtuelle Maskiner: – Sone og OpenJ9.
jeg sterkt anbefalt hvis du er ute etter å installere Java.
Azul Zulu, Amazon Riktig, SAPMachine
vil Du finne en komplett liste over OpenJDK bygger på OpenJDK Wikipedia nettstedet. Blant dem er Azul Zulu, Amazon Riktig, så vel som SapMachine, for å nevne noen. For å overforenkle, det koker ned til at du har ulike alternativer for støtte/vedlikehold-garantier.,
Men sørg for å sjekke ut de enkelte nettstedene for å lære om fordelene av hver enkelt distribusjon.
Anbefaling
Java Har 8-13
Som nevnt i begynnelsen av denne brukerhåndboken: nesten alle (ikke vær kresen nå) Java 8 språk har arbeidet i Java-13. Det samme gjelder for alle andre Java-versjoner i mellom.
igjen, dette betyr at alle språk-funksjoner fra Java 8 tjene som en god Java-base kunnskap, og alt annet (Java 9-13) er ganske mye ekstra funksjoner på toppen av det baseline.,
Her er en rask oversikt over hvilke versjoner har å tilby:
Java 8
Java 8 var en massiv frigjøring og du kan finne en liste over alle funksjoner på Oracle nettstedet. Det er to viktigste funksjonen setter jeg ønsker å nevne her:
Språk Funksjoner: Lambdaer, etc.,
Før Java 8, når du ønsket å instantiate, for eksempel, en ny Kjørbart, du hadde til å skrive en anonym indre klasse, for eksempel slik:
Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } };
Med lambdaer, den samme koden ser slik ut:
Runnable runnable = () -> System.out.println("Hello world two!");
fikk Du også metoden referanser, gjenta kommentarer, standard metoder for grensesnitt, og et par andre språk har.
Samlinger & Bekker
I Java 8, fikk du også funksjonell stil operasjoner for samlinger, også kjent som Stream API., En rask eksempel:
List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");
Nå, pre-Java 8, du i utgangspunktet hadde å skrive for-løkker til å gjøre noe med at listen.
Med Bekker API, kan du gjø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 ganske stor utgivelse, med et par tilføyelser:
Samlinger
Samlinger fikk et par nye helper metoder for å enkelt lage Lister, Settene og Kart.,
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);
Grensesnitt
Grensesnitt fikk private
metoder:
public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); }}
Andre Språk Funksjoner
Og et par andre forbedringer, som en forbedret try-med-ressurser uttalelse-eller diamond-operatør utvidelser.
JShell
til Slutt, Java fikk et skall hvor du kan prøve ut enkle kommandoer og få umiddelbare resultater.
% jshell| Welcome to JShell -- Version 9| For an introduction type: /help introjshell> int x = 10x ==> 10
HTTPClient
Java-9 brakte den første forhåndsvisning versjon av en ny HttpClient
., Inntil da, Javas innebygde Http støtte var ganske lavt nivå, og man måtte falle tilbake på ved hjelp av tredjeparts biblioteker som Apache HttpClient eller OkHttp (som er store biblioteker, btw!).
Med Java-9, Java fikk sitt eget, moderne klient — selv om dette er i oversikt-modus, noe som betyr at det kan endres i senere Java-versjoner.
Prosjekt Jigsaw: Java Moduler og Multi-Slipp Jar-Filer
Java-9 fikk Jigsaw Modul System, noe som minner om de gode gamle OSGI-spesifikasjonen., Det er ikke innenfor rammen av denne veiledningen for å gå inn i detaljer på Jigsaw, men ta en titt på forrige linkene for å lære mer.
Multi-Slipp .jar-filer som gjorde det mulig å ha en .jar-filen som inneholder forskjellige klasser for ulike JVM-versjoner. Så, programmet kan oppføre seg annerledes/har forskjellige klasser som brukes når du kjører på Java 8 vs. Java-10, for eksempel.
Java-10
Det har vært noen endringer i Java-10, som garbage collection, etc., Men den eneste reelle endring du som utvikler vil trolig se er innføringen av var
søkeord, også kalt lokal-variabel-type slutning.
Lokal-Variabel-Type Slutning: var-søkeord
// Pre-Java 10String myName = "Marco";// With Java 10var myName = "Marco"
Føles Javascript-y, gjør det ikke? Det er fortsatt sterkt skrevet, skjønt, og gjelder bare for å variabler inne i metoder (takk, dpash, for å peke ut igjen).
Java 11
Java-11 var også en noe mindre utslipp, fra en utbygger perspektiv.,
Strenger & Filer
Strenger og filer som fikk et par nye metoder (ikke alle er nevnt her):
Kjør Kilde Filer
Starte med Java-10, kan du kjøre Java kilde filer uten å måtte kompilere dem først. Et skritt mot scripting.
ubuntu@DESKTOP-168M0IF:~$ java MyScript.java
Lokal-Variabel-Type Slutning (var) for Lambda Parametere
overskriften sier alt:
(var firstName, var lastName) -> firstName + lastName
HttpClient
HttpClient
fra Java-9 i det siste, ikke-preview version.,
Andre Godsaker
Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Motoren avverget, etc.
Java 12
Java-12 fikk et par nye funksjoner og ren-ups, men de eneste som er verdt å nevne her er Unicode-11-støtte, og en forhåndsvisning av den nye bryteren uttrykk, som du vil se, er omtalt i neste avsnitt.
Java 13
Du kan finne en komplett funksjon liste her, men i hovedsak, du får Unicode-12.,1-støtte, samt to nye eller forbedrede forhåndsvisning funksjoner (kan endres i fremtiden):
Slå Uttrykk (Forhåndsvisning)
Slå uttrykk kan nå returnere en verdi., Og du kan bruke en lambda-stil syntaks for ditt uttrykk, uten å falle igjennom bryte spørsmål:
Gamle bytte uttalelser så ut som dette:
switch(status) { case SUBSCRIBER: // code block break; case FREE_TRIAL: // code block break; default: // code block}
Mens med Java 13, bytte uttalelser kan se ut som dette:
Multiline Strenger (Forhåndsvisning)
Du kan til slutt gjøre dette i Java:
Java 14 og Senere
Vil bli dekket her, så snart som de blir utgitt. Sjekk tilbake snart!,
Konklusjon
nå, bør du ha en ganske god oversikt over et par ting:
- Hvordan du installerer Java, hvilken versjon du skal få, og hvor du får det fra (hint: AdoptOpenJDK).
- Hva et Java-distribusjon er, hvilke som finnes, og hva er forskjellene.
- Hva er forskjellene mellom bestemte Java-versjoner.
Tilbakemelding, rettelser, og tilfeldige innspill er alltid velkommen! Bare legge igjen en kommentar under.
Takk for at du leser!
Det er Mer Der Det Kom Fra
Denne artikkelen opprinnelig dukket opp på www.marcobehler.,com/skrevet som en del av en serie av guider på moderne Java-programmering. For å finne flere guider, besøke nettstedet eller abonnere på nyhetsbrev for å få varslet nylig publisert guider: https://bit.ly/2K0Ao4F.
Erkjennelsene
Stephen Colebourne skrev en fantastisk artikkel om de forskjellige tilgjengelige Java-distribusjoner. Takk, Stephen!
Mer å Lese
JVM økosystemtoktet: Hvorfor Devs ikke Bytte til Java 11
Utover Java 8
Når du Vil Java-11 Erstatte Java-8 som Standard Java?