Guide to Java Versions and Features

Guide to Java Versions and Features

Java 8, Java 11, Java 13-what ‘ s the difference?

U kunt deze handleiding gebruiken om de nieuwste Java te vinden en te installeren, de verschillen tussen Java-distributies te begrijpen (Adopenjdk, OpenJDK, Oraclejdk, enz.), evenals een overzicht van Java taal features, waaronder Java versies 8-13.,

U vindt het misschien ook leuk: Beyond Java 8

achtergrondinformatie

laten we eerst eens kijken naar enkele veel voorkomende, praktische vragen die mensen hebben wanneer ze proberen de juiste Java-versie voor hun project te kiezen.

als u meer wilt weten over een specifieke versie, ga dan naar de Adopenjdk-site, kies de nieuwste Java-versie, download en installeer deze. Kom dan terug naar deze gids en leer nog steeds een ding of twee over verschillende versies van Java.

welke Java-versie moet ik gebruiken?,

vanaf September 2019 is Java 13 de nieuwste versie van Java, met nieuwere versies die elke 6 maanden volgen-Java 14 is gepland voor Maart 2020, Java 15 voor September 2020, enzovoort. In het verleden, Java release cycli waren veel langer, tot 3-5 jaar!.

Met zoveel nieuwe versies die uitkomen, zijn er in principe deze real-world gebruiksscenario ‘s:

  • oudere projecten in bedrijven zitten vaak vast met behulp van Java 8 (zie de” Why Are Companies Still Stuck On Java 8?”sectie hieronder). U zult dus ook Java 8 moeten gebruiken.,
  • sommige oudere projecten zitten zelfs vast op Java 1.5 (uitgebracht in 2004) of 1.6 — uitgebracht in 2006) – sorry, pals!
  • als u ervoor zorgt dat u de allernieuwste IDEs, frameworks en build tools gebruikt en een greenfield project start, kunt u zonder aarzeling Java 11 (LTS) of zelfs de nieuwste Java 13 gebruiken.
  • Er is het speciale gebied van Android-ontwikkeling waar de Java-versie in principe vastzit op Java 7, met een specifieke set van Java 8-functies beschikbaar. Of, u kunt overschakelen naar het gebruik van de Kotlin programmeertaal.

Waarom zitten bedrijven nog steeds vast op Java 8?,

Er is een mix van verschillende redenen waarom bedrijven nog steeds vastzitten aan Java 8. Om er een paar te noemen:

  • Build tools (Maven, Gradle, etc.) en sommige bibliotheken hadden aanvankelijk bugs met Versies Java versies > 8 en hadden updates nodig. Zelfs vandaag, met bijvoorbeeld Java 9+, bepaalde build tools printen “reflective access” – waarschuwingen bij het bouwen van Java-projecten, die gewoon” voelt niet klaar”, hoewel de builds zijn prima.
  • tot Java 8 gebruikte je vrijwel de JDK-builds van Oracle en hoefde je je geen zorgen te maken over licenties., Oracle veranderde het licentieschema in 2019, hoewel, waardoor het Internet gek te zeggen “Java is niet meer vrij” — en een behoorlijke hoeveelheid verwarring volgde. Dit is, echter, niet echt een probleem, die u zult leren over in de” Java distributies ” sectie van deze gids.
  • sommige bedrijven hebben beleid om alleen LTS-versies te gebruiken en vertrouwen op hun OS-leveranciers om hen deze builds te leveren, wat tijd kost.

om alles samen te vatten, heb je een mix van praktische kwesties (het upgraden van je tools, bibliotheken, frameworks) en politieke kwesties.,

Waarom worden sommige Java-versies 1 genoemd.X?

Java versies voor 9 hadden gewoon een ander naamschema. Java 8 kan dus ook 1.8 worden genoemd, Java 5 kan 1.5 worden genoemd, enz. Toen u het java -version Commando uitgaf met deze versies, kreeg u een uitvoer als deze:

Dit betekent gewoon Java 8. Met de overstap naar Time-based releases met Java 9, de naamgeving schema ook veranderd, en Java-versies worden niet voorafgegaan door 1.x niet meer. Nu ziet het versienummer er zo uit:

Wat Is het verschil tussen Java-versies?, Moet ik een specifieke leren?

afkomstig uit andere programmeertalen met belangrijke onderbrekingen tussen releases, zoals bijvoorbeeld Python 2 tot 3, vraagt u zich misschien af of hetzelfde geldt voor Java.

Java is in dit opzicht bijzonder, omdat het zeer achterwaarts compatibel is. Dit betekent dat uw Java 5 of 8 programma is gegarandeerd te draaien met een Java 8-13 virtuele Machine — met een paar uitzonderingen die u niet hoeft te maken over voor nu.

Het werkt duidelijk niet andersom, stel dat uw programma afhankelijk is van Java 13 functies die simpelweg niet beschikbaar zijn onder een Java 8 JVM.,

Dit betekent een paar dingen:

  • u “leert” niet zomaar een specifieke Java-versie, zoals Java 12.
  • in plaats daarvan krijg je een goede basis in alle taalfuncties tot Java 8.
  • en dan kun je uit een gids als deze leren welke extra functies er in Java 9-13 kwamen en ze gebruiken wanneer je maar kunt.

Wat zijn voorbeelden van deze nieuwe functies tussen Java-versies?

Bekijk hieronder de sectie “Java Features 8-13”.,

maar als vuistregel: de oudere, langere release-cycli (3-5 jaar, tot Java 8) betekende veel nieuwe functies per release.

de zes maanden durende release cyclus betekent minder features per release, zodat u snel kunt inhalen op Java 9-13 taal features.

Wat is het verschil tussen een JRE en een JDK?

tot nu toe hebben we alleen gesproken over “Java.”Maar wat is Java precies?

eerst moet u onderscheid maken tussen een JRE (Java Runtime Environment) en een JDK (Java Development Kit).,

historisch gezien heb je alleen een JRE gedownload als je alleen geïnteresseerd was in het draaien van Java-programma ‘ s. Een JRE bevat onder andere de Java Virtual Machine (JVM) en de “java” command-line tool.

om nieuwe Java-programma ‘ s te ontwikkelen, moest u een JDK downloaden. Een JDK bevat alles wat de JRE heeft, evenals de compiler javac en een paar andere tools zoals javadoc (Java documentation generator) en jdb (Java Debugger).

waarom spreek ik nu in de verleden tijd?,

tot Java 8 bood de Oracle-website JREs en JDKs als afzonderlijke downloads aan-hoewel de JDK ook altijd een JRE in een aparte map bevatte. Met Java 9, dat onderscheid was eigenlijk verdwenen, en je bent altijd het downloaden van een JDK. De mapstructuur van JDKs is ook veranderd, omdat er geen expliciete JRE-Map meer is.

dus, hoewel sommige distributies (zie de “Java distributies” sectie) nog steeds een aparte JRE download aanbieden, lijkt er de trend te zijn om alleen een JDK aan te bieden. Vandaar dat we van nu af aan Java en JDK door elkaar gaan gebruiken.,

Hoe installeer ik dan Java of een JDK?

negeer de Java-Docker images, .msi wrappers, of platform-specifieke pakketten voor het moment. Op het einde, Java is slechts een .zip-bestand; niets meer, niets minder.

het enige wat u hoeft te doen om Java op uw machine te installeren is uw jdk-{5-13} uit te pakken.zip-bestand. Daar heb je niet eens administrator rechten voor nodig.,

uw uitgepakte Java-bestand ziet er als volgt uit:

De magie gebeurt in de/bin-map, die er onder Windows als volgt uitziet:

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

het enige wat u hoeft te doen is dat bestand uitpakken en de / bin-map in uw PATH-variabele zetten, zodat u het commando ‘java’ overal kunt aanroepen.

(In het geval dat u zich afvraagt, GUI installateurs zoals die van Oracle of Adopenjdk zal het uitpakken en wijzigen van de PATH variabele voor u, dat is het ongeveer.,)

om te controleren of u Java correct hebt geïnstalleerd, kunt u vervolgens java -versionuitvoeren. Als de uitvoer eruit ziet als die hieronder, ben je klaar om te gaan!

nu is er nog een vraag: Waar haal je die Java vandaan .zip-bestand van? Dat brengt ons bij het onderwerp distributies.

Java distributies

Er zijn verschillende sites die Java (lees: JDK) downloads aanbieden en het is onduidelijk “wie biedt wat en met welke licenties”. Dit hoofdstuk zal hier wat licht op werpen.,

het OpenJDK-Project

in termen van Java-broncode (lees: de broncode voor uw JRE / JDK), is er slechts één levend op de OpenJDK-projectsite.

Dit is gewoon broncode, echter, niet een distribueerbare build (denk: uw .zip-bestand met de gecompileerde java-opdracht voor uw specifieke besturingssysteem). In theorie kunnen jij en ik een build maken van die broncode, het MarcoJDK noemen, en het gaan verspreiden. Maar onze distributie zou gebrek aan certificering, in staat zijn om ons wettelijk Java SE compatible noemen.,

daarom zijn er in de praktijk een handvol leveranciers die deze builds daadwerkelijk maken, ze gecertificeerd krijgen (zie TCK), en ze vervolgens distribueren.

en terwijl leveranciers niet, zeg maar, een methode uit de String klasse kunnen verwijderen voordat ze een nieuwe Java build produceren, kunnen ze branding toevoegen( yay!) of voeg een aantal andere (bijvoorbeeld CLI) hulpprogramma ‘ s die ze nuttig achten. Maar anders dan dat, de oorspronkelijke broncode is hetzelfde voor alle Java distributies.

OpenJDK bouwt (door Oracle) en OracleJDK bouwt

een van de leveranciers die Java bouwt vanuit de broncode is Oracle., Dit leidt tot twee verschillende Java-distributies, die in het begin erg verwarrend kunnen zijn.

  1. OpenJDK bouwt door Oracle(!). Deze builds zijn gratis en merkloos, maar Oracle zal geen updates uitbrengen voor oudere versies, zeggen Java 13, zodra Java 14 uitkomt.
  2. OracleJDK, een commerciële versie die begint met de licentiewijziging in 2019. Dit betekent dat het gratis kan worden gebruikt tijdens de ontwikkeling, maar u moet Oracle betalen als u het in productie gebruikt. Hiervoor krijgt u langere ondersteuning, dat wil zeggen updates van versies en een telefoonnummer dat u kunt bellen als uw JVM gek wordt.,

nu, historisch (pre-Java 8), waren er werkelijke bron verschillen tussen OpenJDK builds en oraclejdk builds, waar je zou kunnen zeggen dat OracleJDK ‘beter’was. Maar vanaf vandaag zijn beide versies in wezen hetzelfde, met kleine verschillen.

Het komt er dan op neer dat u betaalde, commerciële ondersteuning (een telefoonnummer) voor uw geïnstalleerde Java-versie wilt.

AdoptOpenJDK

In 2017 startte een groep van Java-gebruikersgroepen, ontwikkelaars en leveranciers (Amazon, Microsoft, Pivotal, Red Hat en anderen) een community genaamd AdoptOpenJDK.,

ze bieden gratis, solide OpenJDK builds met langere beschikbaarheid / updates en bieden u zelfs de keuze uit twee verschillende Java virtuele Machines: HotSpot en OpenJ9.

Ik raad u ten zeerste aan als u Java wilt installeren.

Azul Zulu, Amazon Corretto, SAPMachine

u vindt een volledige lijst van OpenJDK builds op de OpenJDK Wikipedia site. Onder hen zijn Azul Zulu, Amazon Corretto, evenals SapMachine, om er een paar te noemen. Te simplify, het komt neer op u met verschillende ondersteuningsopties/onderhoudsgaranties.,

maar zorg ervoor dat u de afzonderlijke websites bekijkt om meer te weten te komen over de voordelen van elke afzonderlijke distributie.

aanbeveling

Java-functies 8-13

zoals aan het begin van deze gids al werd vermeld: in wezen werken alle Java-functies (wees nu niet kieskeurig) in Java 13. Hetzelfde geldt voor alle andere Java versies daartussen.

op zijn beurt betekent dit dat alle taalfuncties van Java 8 dienen als een goede Java basiskennis, en al het andere (Java 9-13) is vrijwel extra functies bovenop die basislijn.,

Hier is een snel overzicht van wat specifieke versies te bieden hebben:

Java 8

Java 8 was een enorme release en u kunt een lijst van alle functies vinden op de Oracle website. Er zijn twee hoofdfuncties die ik hier wil noemen:

taalfuncties: Lambdas, etc.,

Voordat Java 8 wanneer u wilde een exemplaar te maken van, bijvoorbeeld, een nieuw Draaibaar, u had om te schrijven een anonieme innerlijke klasse, zoals:

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

Met lambdas dezelfde code ziet er zo uit:

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

kreeg Je ook de methode van referenties, het herhalen van annotaties, standaard methoden voor interfaces, en een paar andere taal heeft.

collecties & Streams

in Java 8 heeft u ook functional-stijl operaties voor collecties, ook bekend als de Stream API., Een snel voorbeeld:

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

nu, pre-Java 8, moest je eigenlijk schrijven voor-loops om iets met die lijst te doen.

met de Streams API kunt u het volgende doen:

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

Java 9

Java 9 was ook een vrij grote release, met een paar toevoegingen:

collecties

collecties hebben een paar nieuwe hulpmethoden om eenvoudig lijsten, Sets en kaarten te construeren.,

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

Interfaces

Interfaces got privatemethods:

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

Other Language Features

en een paar andere verbeteringen, zoals een verbeterde try-with-resources statement of Diamond Operator extensies.

JShell

tenslotte kreeg Java Een shell waar je eenvoudige commando ‘ s kunt uitproberen en direct resultaten kunt krijgen.

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

HTTPClient

Java 9 bracht de eerste voorbeeldversie van een nieuwe HttpClient., Tot dan toe, Java ‘ s ingebouwde Http-ondersteuning was nogal low-level, en je moest terugvallen op het gebruik van derden bibliotheken zoals Apache HttpClient of OkHttp (die zijn grote bibliotheken, btw!).

met Java 9 kreeg Java zijn eigen, moderne client — hoewel dit in de preview-modus staat, wat betekent dat het onderhevig is aan veranderingen in latere Java-versies.

Project Jigsaw: Java Modules en Multi-Release Jar bestanden

Java 9 heeft het Jigsaw Module systeem, dat enigszins lijkt op de goede oude OSGi specificatie., Het is niet in het kader van deze gids om in detail te gaan op Jigsaw, maar neem een kijkje op de vorige links om meer te leren.

Multi-Release .jar files maakte het mogelijk om er een te hebben .jar-bestand dat verschillende klassen voor verschillende JVM-versies bevat. Zo, uw programma kan zich anders gedragen / hebben verschillende klassen gebruikt wanneer uitgevoerd op Java 8 Vs. Java 10, bijvoorbeeld.

Java 10

Er zijn een paar wijzigingen in Java 10, zoals garbage collection, etc., Maar de enige echte verandering die u als ontwikkelaar waarschijnlijk zult zien is de introductie van hetvar sleutelwoord, ook wel local-variable Type inference genoemd.

local-Variable Type Inference: var-keyword

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

voelt Javascript-y aan, nietwaar? Het is nog steeds sterk getypt, hoewel, en alleen van toepassing op variabelen binnen methoden (bedankt, dpash, voor het wijzen op dat weer).

Java 11

Java 11 was ook een iets kleinere release, vanuit een ontwikkelaarsperspectief.,

Strings & bestanden

Strings en bestanden hebben een aantal nieuwe methoden gekregen (niet alle worden hier weergegeven):

bronbestanden uitvoeren

vanaf Java 10 kunt u Java bronbestanden uitvoeren zonder ze eerst te compileren. Een stap in de richting van scripting.

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

Local-Variable Type Inference (var) for Lambda Parameters

de header zegt het allemaal:

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

HttpClient

De HttpClient from Java 9 in its final, non-preview version.,

andere Goodies

Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Engine verouderd, enz.

Java 12

Java 12 heeft een aantal nieuwe functies en opschonen gekregen, maar de enige die het vermelden waard zijn, zijn Unicode 11 ondersteuning en een voorbeeld van de nieuwe switch expressie, die u in de volgende sectie zult zien.

Java 13

U kunt hier een volledige lijst met functies vinden, maar in wezen krijgt u Unicode 12.,1 ondersteuning, evenals twee nieuwe of verbeterde preview-functies (onderhevig aan verandering in de toekomst):

Switch Expression (Preview)

Switch expressions kan nu een waarde retourneren., En u kunt een lambda-stijl syntaxis gebruiken voor uw expressies, zonder de fall-through/break problemen:

oude switch statements zag er als volgt uit:

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

terwijl met Java 13, switch statements er als volgt uit kunnen zien:

Multiline Strings (Preview)

U kunt dit eindelijk doen in Java:

java 14 en later

worden hier behandeld, zodra ze worden vrijgegeven. Kom snel terug!,

conclusie

Inmiddels zou je een vrij goed overzicht moeten hebben van een paar dingen:

  • Hoe Java te installeren, welke versie te krijgen, en waar het vandaan te halen (hint: Adopenjdk).
  • Wat een Java distributie is, welke er bestaan, en wat zijn de verschillen.
  • Wat zijn de verschillen tussen specifieke Java versies.

Feedback, correcties en willekeurige invoer zijn altijd welkom! Laat gewoon een reactie achter beneden.

Bedankt voor het lezen!

er is meer waar dat vandaan kwam

Dit artikel verscheen oorspronkelijk op www.marcobehler.,com / geschreven als onderdeel van een reeks gidsen over moderne Java-programmering. Om meer gidsen te vinden, bezoek de website of abonneer u op de nieuwsbrief om op de hoogte te worden gebracht van nieuw gepubliceerde gidsen: https://bit.ly/2K0Ao4F.

bevestigingen

Stephen Colebourne schreef een fantastisch artikel over de verschillende beschikbare Java distributies. Bedankt, Stephen!

verder lezen

JVM Ecosystem Survey: waarom Devs niet overschakelen naar Java 11

voorbij Java 8

Wanneer zal Java 11 Java 8 vervangen als de standaard Java?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *