Leitfaden für Java — Versionen und Funktionen

Leitfaden für Java — Versionen und Funktionen

Java 8, Java 11, Java 13-was ist der Unterschied?

Mit diesem Handbuch können Sie das neueste Java finden und installieren und die Unterschiede zwischen Java-Distributionen (AdoptOpenJDK, OpenJDK, OracleJDK usw.) verstehen.), sowie erhalten Sie einen Überblick über Java-Sprachfunktionen, einschließlich Java-Versionen 8-13.,

Sie mögen vielleicht auch: Jenseits von Java 8

Hintergrundinformationen

Schauen wir uns zunächst einige häufige, praktische Fragen an, die Menschen haben, wenn sie versuchen, die richtige Java-Version für ihr Projekt auszuwählen.

Wenn Sie mehr über eine bestimmte Version erfahren möchten, rufen Sie die AdoptOpenJDK-Site auf, wählen Sie die neueste Java-Version aus, laden Sie sie herunter und installieren Sie sie. Dann kehren Sie zu dieser Anleitung zurück und lernen Sie noch ein oder zwei Dinge über verschiedene Java-Versionen.

Welche Java-Version Soll ich Verwenden?,

Ab September 2019 ist Java 13 die neueste veröffentlichte Java-Version, wobei alle 6 Monate neuere Versionen folgen-Java 14 ist für März 2020 geplant, Java 15 für September 2020 und so weiter. In der Vergangenheit waren Java-Release-Zyklen viel länger, bis zu 3-5 Jahren!.

Mit so vielen neuen Versionen gibt es im Grunde diese realen Nutzungsszenarien:

  • Legacy-Projekte in Unternehmen stecken oft mit Java 8 fest (siehe “ Warum stecken Unternehmen immer noch auf Java 8 fest?“Abschnitt unten). Daher müssen Sie auch Java 8 verwenden.,
  • Einige Legacy-Projekte stecken sogar auf Java 1.5 (veröffentlicht 2004) oder 1.6 (veröffentlicht 2006) — sorry, Kumpels!
  • Wenn Sie sicherstellen, dass Sie die neuesten IDEs, Frameworks und Build-Tools verwenden und ein Greenfield-Projekt starten, können Sie ohne zu zögern Java 11 (LTS) oder sogar das neueste Java 13 verwenden.
  • Es gibt das spezielle Gebiet der Android-Entwicklung, in dem die Java-Version im Grunde bei Java 7 feststeckt, mit einem bestimmten Satz von Java 8-Funktionen zur Verfügung. Oder Sie können zur Verwendung der Programmiersprache Kotlin wechseln.

Warum stecken Unternehmen immer noch auf Java 8 fest?,

Es ist eine Mischung aus verschiedenen Gründen die Unternehmen sitzen immer noch mit Java 8. Um ein paar zu nennen:

  • Build-tools (Maven, Gradle, etc.) und einige Bibliotheken zunächst hatte die bugs mit den Versionen Java-Versionen > 8 und benötigt updates. Auch heute, mit zB Java 9+, drucken bestimmte Build-Tools beim Erstellen von Java-Projekten „reflective Access“ – Warnungen aus, die sich einfach „nicht bereit“ anfühlen, obwohl die Builds in Ordnung sind.
  • Bis Java 8 verwendeten Sie so ziemlich die JDK-Builds von Oracle und mussten sich nicht um die Lizenzierung kümmern., Oracle änderte jedoch 2019 das Lizenzschema, wodurch das Internet verrückt wurde und sagte: „Java ist nicht mehr kostenlos“ — und es folgte eine Menge Verwirrung. Dies ist jedoch nicht wirklich ein Problem, das Sie im Abschnitt „Java-Distributionen“ dieses Handbuchs erfahren werden.
  • Einige Unternehmen haben Richtlinien, um nur LTS-Versionen zu verwenden, und verlassen sich darauf, dass ihre Betriebssystemanbieter ihnen diese Builds zur Verfügung stellen, was einige Zeit in Anspruch nimmt.

Um die Dinge zusammenzufassen, haben Sie eine Mischung aus praktischen Fragen (Upgrade Ihrer Tools, Bibliotheken, Frameworks) und politischen Fragen.,

Warum heißen einige Java-Versionen 1?X?

Java-Versionen vor 9 hatten einfach ein anderes Namensschema. Java 8 kann also auch 1.8, Java 5 1.5 usw. genannt werden. Wenn Sie den Befehl java -version mit diesen Versionen ausgegeben haben, haben Sie eine Ausgabe wie folgt erhalten:

Dies bedeutet einfach Java 8. Mit dem Wechsel zu zeitbasierten Releases mit Java 9 hat sich auch das Namensschema geändert, und Java-Versionen wird keine 1 vorangestellt.x nicht mehr. Nun sieht die Versionsnummer so aus:

Was ist der Unterschied zwischen Java-Versionen?, Soll ich eine bestimmte lernen?

Wenn Sie aus anderen Programmiersprachen mit großen Brüchen zwischen den Versionen kommen, z. B. Python 2 bis 3, fragen Sie sich möglicherweise, ob dasselbe für Java gilt.

Java ist in dieser Hinsicht besonders, da es extrem abwärtskompatibel ist. Dies bedeutet, dass Ihr Java 5 — oder 8-Programm garantiert mit einer virtuellen Java 8-13-Maschine ausgeführt wird-mit wenigen Ausnahmen, um die Sie sich vorerst keine Sorgen machen müssen.

Es funktioniert offensichtlich nicht umgekehrt, angenommen, Ihr Programm basiert auf Java 13-Funktionen, die unter einer Java 8-JVM einfach nicht verfügbar sind.,

Dies bedeutet ein paar Dinge:

  • Sie „lernen“ nicht nur eine bestimmte Java-Version wie Java 12.
  • Vielmehr erhalten Sie eine gute Grundlage in allen Sprachfunktionen bis Java 8.
  • Und dann können Sie aus einer Anleitung wie dieser lernen, welche zusätzlichen Funktionen in Java 9-13 enthalten sind, und sie jederzeit verwenden.

Was sind Beispiele für diese neuen Funktionen zwischen Java-Versionen?

Schauen Sie sich den Abschnitt“ Java Features 8-13 “ unten an.,

Aber als Faustregel gilt: Die älteren, längeren Release-Zyklen (3-5 Jahre, bis Java 8) bedeuteten viele neue Features pro Release.

Der sechsmonatige Release-Zyklus bedeutet weniger Features pro Release, so dass Sie schnell aufholen können Java 9-13 Sprachfunktionen.

Was ist der Unterschied zwischen einem JRE und einem JDK?

Bisher haben wir nur von „Java“ gesprochen.“Aber was ist Java eigentlich?

Zunächst müssen Sie zwischen einer JRE (Java Runtime Environment) und einem JDK (Java Development Kit) unterscheiden.,

Historisch gesehen haben Sie nur eine JRE heruntergeladen, wenn Sie nur daran interessiert waren, Java-Programme auszuführen. Eine JRE umfasst unter anderem die Java Virtual Machine (JVM) und das Befehlszeilentool „java“.

Um neue Java-Programme zu entwickeln, mussten Sie ein JDK herunterladen. Ein JDK enthält alles, was die JRE hat, sowie den Compiler javac und einige andere Tools wie javadoc (Java documentation generator) und jdb (Java Debugger).

Warum spreche ich jetzt in Vergangenheitsform?,

Bis Java 8 bot die Oracle-Website JREs und JDKs als separate Downloads an — obwohl das JDK auch immer eine JRE in einem separaten Ordner enthielt. Mit Java 9 war diese Unterscheidung im Grunde genommen weg und Sie laden immer ein JDK herunter. Die Verzeichnisstruktur von JDKs hat sich ebenfalls geändert, ohne dass ein expliziter JRE-Ordner mehr vorhanden ist.

Obwohl einige Distributionen (siehe Abschnitt „Java-Distributionen“) immer noch einen separaten JRE-Download anbieten, scheint es den Trend zu geben, nur ein JDK anzubieten. Daher werden wir Java und JDK von nun an austauschbar verwenden.,

Wie installiere ich dann Java oder ein JDK?

– Ignorieren Sie die Java-Docker-images, .msi-Wrapper oder plattformspezifische Pakete für den Moment. Am Ende ist Java nur ein .zip-Datei; nicht mehr, nicht weniger.

Um Java auf Ihrem Computer zu installieren, müssen Sie daher nur Ihr jdk-{5-13} entpacken.zip-Datei. Sie benötigen dafür nicht einmal Administratorrechte.,

Ihre entpackte Java-Datei sieht folgendermaßen aus:

Die Magie geschieht im Verzeichnis / bin, das unter Windows so aussieht:

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

Sie müssen diese Datei also nur entpacken und das Verzeichnis /bin in Ihre Pfadvariable einfügen, sodass Sie den Befehl ‚java‘ von überall aus aufrufen können.

(Falls Sie sich fragen, GUI-Installer wie der von Oracle oder AdoptOpenJDK entpacken und Ändern der Pfadvariablen für Sie, das war ‚ s.,)

Um zu überprüfen, ob Sie Java korrekt installiert haben, können Sie einfach java -versionausführen. Wenn die Ausgabe wie die folgende aussieht, können Sie loslegen!

Jetzt gibt es noch eine Frage: Woher bekommst du das Java?zip-Datei aus? Das bringt uns zum Thema Distributionen.

Java-Distributionen

Es gibt eine Vielzahl von Websites, die Java (sprich: JDK) – Downloads anbieten, und es ist unklar, „wer was und mit welcher Lizenzierung anbietet“. Dieser Abschnitt wird etwas Licht darauf werfen.,

Das OpenJDK-Projekt

In Bezug auf den Java-Quellcode (sprich: den Quellcode für Ihr JRE / JDK) lebt nur einer auf der OpenJDK-Projektseite.

Dies ist nur Quellcode, jedoch kein verteilbarer Build (denken Sie: Ihr .zip-Datei mit dem kompilierten Java-Befehl für Ihr spezifisches Betriebssystem). Theoretisch könnten Sie und ich einen Build aus diesem Quellcode erstellen, ihn beispielsweise MarcoJDK nennen und mit der Verteilung beginnen. Aber unserer Distribution würde die Zertifizierung fehlen, um uns legal Java SE-kompatibel nennen zu können.,

Deshalb gibt es in der Praxis eine Handvoll Anbieter, die diese Builds tatsächlich erstellen, zertifizieren lassen (siehe TCK) und dann verteilen.

Und während Anbieter beispielsweise keine Methode aus der String-Klasse entfernen können, bevor sie einen neuen Java-Build erstellen, können sie Branding hinzufügen (yay!) oder fügen Sie einige andere (z. B. CLI) Dienstprogramme hinzu, die sie für nützlich halten. Ansonsten ist der ursprüngliche Quellcode für alle Java-Distributionen derselbe.

OpenJDK Builds (von Oracle) und OracleJDK Builds

Einer der Anbieter, der Java aus dem Quellcode erstellt, ist Oracle., Dies führt zu zwei verschiedenen Java-Distributionen, was zunächst sehr verwirrend sein kann.

  1. OpenJDK-builds von Oracle(!). Diese Builds sind kostenlos und ohne Markenzeichen, aber Oracle veröffentlicht keine Updates für ältere Versionen, z. B. Java 13, sobald Java 14 herauskommt.
  2. OracleJDK, ein Marken -, kommerzieller Build, der mit der Lizenzänderung in 2019 beginnt. Dies bedeutet, dass es während der Entwicklung kostenlos verwendet werden kann, aber Sie müssen Oracle bezahlen, wenn Sie es in der Produktion verwenden. Dazu erhalten Sie einen längeren Support, dh Updates für Versionen und eine Telefonnummer, die Sie anrufen können, wenn Ihre JVM verrückt wird.,

In der Vergangenheit (vor Java 8) gab es tatsächliche Quellunterschiede zwischen OpenJDK-Builds und OracleJDK-Builds, bei denen man sagen konnte, dass OracleJDK „besser“ war. Aber ab heute sind beide Versionen im Wesentlichen gleich, mit geringfügigen Unterschieden.

Es läuft dann darauf hinaus, dass Sie bezahlten, kommerziellen Support (eine Telefonnummer) für Ihre installierte Java-Version wünschen.

AdoptOpenJDK

Im Jahr 2017 startete eine Gruppe von Java-Benutzergruppenmitgliedern, Entwicklern und Anbietern (Amazon, Microsoft, Pivotal, Red Hat und andere) eine Community namens AdoptOpenJDK.,

Sie bieten kostenlose, solide OpenJDK-Builds mit längerer Verfügbarkeit/Updates und bieten Ihnen sogar die Wahl zwischen zwei verschiedenen virtuellen Java-Maschinen: HotSpot und OpenJ9.

Ich empfehle dringend, wenn Sie Java installieren möchten.

Azul Zulu, Amazon Corretto, SAPMachine

Eine vollständige Liste der OpenJDK-Builds finden Sie auf der OpenJDK-Wikipedia-Site. Unter ihnen sind Azul Zulu, Amazon Corretto sowie SapMachine, um nur einige zu nennen. Um zu vereinfachen, läuft es darauf hinaus, dass Sie verschiedene Support-Optionen/Wartungsgarantien haben.,

Aber schauen Sie sich die einzelnen Websites an, um mehr über die Vorteile jeder einzelnen Distribution zu erfahren.

Empfehlung

Java Features 8-13

Wie am Anfang dieses Handbuchs erwähnt: Im Wesentlichen funktionieren alle (seien Sie jetzt nicht wählerisch) Java 8-Sprachfunktionen in Java 13. Das gleiche gilt für alle anderen Java-Versionen dazwischen.

Dies bedeutet wiederum, dass alle Sprachfunktionen von Java 8 als gute Java-Basiskenntnisse dienen und alles andere (Java 9-13) zusätzlich zu dieser Baseline ziemlich zusätzliche Funktionen bietet.,

Hier ist ein kurzer Überblick, was bestimmte Versionen zu bieten haben:

Java 8

Java 8 war eine massive Version und Sie können eine Liste aller Funktionen auf der Oracle-Website finden. Es gibt zwei Hauptmerkmalssätze, die ich hier erwähnen möchte:

Sprachfunktionen: Lambdas usw.,

Vor Java 8 mussten Sie, wann immer Sie beispielsweise ein neues Runnable instanziieren wollten, eine anonyme innere Klasse wie folgt schreiben:

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

Mit Lambdas sieht derselbe Code folgendermaßen aus:

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

Sie haben auch Methodenreferenzen, wiederholte Anmerkungen, Standardmethoden für Schnittstellen und einige andere Sprachfunktionen.

Collections & Streams

In Java 8 haben Sie auch funktionale Operationen für Sammlungen, die auch als Stream-API bezeichnet werden., Ein kurzes Beispiel:

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

Vor Java 8 mussten Sie im Grunde for-Schleifen schreiben, um etwas mit dieser Liste zu tun.

Mit der Streams-API können Sie Folgendes tun:

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

Java 9

Java 9 war auch eine ziemlich große Version mit ein paar Ergänzungen:

Sammlungen

Sammlungen haben ein paar neue Hilfsmethoden zum einfachen Erstellen von Listen, Sets und Maps.,

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: private Methoden:

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

Weitere Sprachfunktionen

Und einige weitere Verbesserungen, wie ein verbesserter try-with-resources statement oder Diamond Operator Extensions.

JShell

Schließlich hat Java eine Shell, in der Sie einfache Befehle ausprobieren und sofortige Ergebnisse erzielen können.

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

HTTPClient

Java 9 brachte die erste Vorschau version eines neuen HttpClient., Bis dahin war die integrierte Http-Unterstützung von Java eher auf niedrigem Niveau, und Sie mussten auf Bibliotheken von Drittanbietern wie Apache HttpClient oder OkHttp zurückgreifen (was übrigens großartige Bibliotheken sind!).

Mit Java 9 hat Java einen eigenen, modernen Client erhalten — obwohl sich dieser im Vorschaumodus befindet, was bedeutet, dass er sich in späteren Java-Versionen ändern kann.

Project Jigsaw: Java-Module und Multi-Release-JAR-Dateien

Java 9 hat das Jigsaw-Modulsystem erhalten, das der guten alten OSGI-Spezifikation ähnelt., Es liegt nicht im Rahmen dieses Handbuchs, auf Jigsaw ausführlich einzugehen, aber schauen Sie sich die vorherigen Links an, um mehr zu erfahren.

Multi-Release .jar-Dateien machten es möglich, eine zu haben .jar-Datei, die verschiedene Klassen für verschiedene JVM-Versionen enthält. Ihr Programm kann sich also anders verhalten/verschiedene Klassen verwenden, wenn es beispielsweise unter Java 8 vs. Java 10 ausgeführt wird.

Java 10

Es gab einige Änderungen an Java 10, wie Garbage Collection usw., Die einzige wirkliche Änderung, die Sie als Entwickler wahrscheinlich sehen werden, ist die Einführung des Schlüsselworts var, das auch als Inferenz vom Typ lokale Variablen bezeichnet wird.

Local-Variable Type Inference: var-Schlüsselwort

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

Fühlt Javascript-y, nicht wahr? Es ist jedoch immer noch stark typisiert und gilt nur für Variablen innerhalb von Methoden (danke, dpash, um noch einmal darauf hinzuweisen).

Java 11

Java 11 war auch eine etwas kleinere Version, aus Entwicklersicht.,

Strings & Dateien

Strings und Dateien haben ein paar neue Methoden (nicht alle hier aufgelistet):

Führen Sie Quelldateien

Ab Java 10 können Sie Java-Quelldateien ausführen, ohne sie zuerst kompilieren zu müssen. Ein Schritt in Richtung scripting.

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

Local-Variable Type Inference (var) für Lambda-Parameter

Die Kopfzeile sagt schon alles:

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

HttpClient

HttpClient von Java 9 in seiner endgültigen, nicht-preview-version.,

Andere Leckereien

Flugschreiber, No-Op Garbage Collector, Nashorn-Javascript-Engine veraltet usw.

Java 12

Java 12 hat einige neue Funktionen und Bereinigungen erhalten, aber die einzigen erwähnenswerten sind die Unicode 11-Unterstützung und eine Vorschau des neuen Switch-Ausdrucks, die Sie im nächsten Abschnitt sehen werden.

Java 13

Hier finden Sie eine vollständige Funktionsliste, aber im Wesentlichen erhalten Sie Unicode 12.,1 unterstützung, sowie zwei neue oder verbesserte Vorschau-Funktionen (Änderungen vorbehalten in der Zukunft):

Switch-Ausdruck (Vorschau)

Switch-Ausdrücke können nun einen Wert zurückgeben., Und Sie können eine Syntax im Lambda-Stil für Ihre Ausdrücke verwenden, ohne die Probleme beim Durchbrechen/Unterbrechen:

Alte switch-Anweisungen sahen folgendermaßen aus:

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

Während switch-Anweisungen mit Java 13 wie folgt aussehen können:

Mehrzeilige Zeichenfolgen (Vorschau)

Sie können dies schließlich in Java tun:

>

Java 14 und höher

Wird hier behandelt, sobald sie veröffentlicht werden. Überprüfen Sie bald zurück!,

Fazit

Inzwischen solltest du einen ziemlich guten Überblick über ein paar Dinge haben:

  • Wie installiere ich Java, welche Version bekomme ich und woher bekomme ich es (Hinweis: AdoptOpenJDK).
  • Was eine Java-Distribution ist, welche existieren und welche Unterschiede bestehen.
  • Was sind die Unterschiede zwischen bestimmten Java-Versionen.

Feedback, Korrekturen und zufällige Eingaben, sind immer willkommen! Hinterlasse einfach unten einen Kommentar.

Danke fürs Lesen!

Es gibt Mehr, Wo Das herkam

Dieser Artikel erschien ursprünglich auf www.marcobehler.,com / geschrieben als Teil einer Reihe von Anleitungen zur modernen Java-Programmierung. Um weitere Anleitungen zu finden, besuchen Sie die Website oder abonnieren Sie den Newsletter, um über neu veröffentlichte Anleitungen informiert zu werden: https://bit.ly/2K0Ao4F.

Acknowledgments

Stephen Colebourne schrieb einen fantastischen Artikel über die verschiedenen zur Verfügung stehenden Java-Distributionen. Danke, Stephen!

Weiterlesen

JVM Ecosystem Survey: Warum wechseln Entwickler nicht zu Java 11

Jenseits von Java 8

Wann ersetzt Java 11 Java 8 als Standard-Java?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.