1. Geschichte der Java-Versionen

Die Geschichte von Java beginnt im Jahr 1991, als eine Gruppe von Sun-Programmierern beschloss, eine Sprache für kleine Geräte zu entwickeln: TV-Fernbedienungen, Kaffeemaschinen, Toaster, Bankkarten und so weiter.

Hersteller dieser Geräte nutzten zur Steuerung ihrer Produkte sehr unterschiedliche Prozessoren, daher wurde es sehr wichtig, sich an die Architektur eines bestimmten Prozessors oder Betriebssystems zu binden.

Die Entwickler von Java beschlossen, das Problem in zwei Teile aufzuteilen: Ihre Programme würden nicht in den Maschinencode für einen bestimmten Prozessor, sondern in einen speziellen Zwischencode kompiliert. Dieser Zwischencode wiederum würde von einem speziellen Programm, einer sogenannten virtuellen Maschine, ausgeführt werden .

Die meisten Programmierer bezeichnen einen Computer als Maschine.

Interessant.

C++ wurde als Grundlage für die Java-Sprache genommen und stark vereinfacht und standardisiert. Wenn C++ es Ihnen ermöglicht, etwas auf zehn Arten zu tun, dann hat Java nur eine davon beibehalten. In gewisser Weise war es wie der Übergang von Hieroglyphen zu einem Alphabet.

Die erste Version von Java wurde 1996 veröffentlicht. Seitdem begann Java seinen Siegeszug um die Welt, was wiederum die Entwicklung und das Wachstum der Sprache selbst stimulierte. Heutzutage werden Millionen von Bibliotheken und Milliarden von Codezeilen in Java geschrieben, und alle 6 Monate werden neue Versionen von Java veröffentlicht:

Name Jahr Anzahl der Klassen
JDK 1.0 1996 211
JDK 1.1 1997 477
J2SE 1.2 1998 1.524
J2SE 1.3 2000 1.840
J2SE 1.4 2002 2.723
J2SE 5.0 2004 3.279
Java SE 6 2006 3.793
Java SE 7 2011 4.024
Java SE 8 2014 4.240
Java SE 9 2017 6.005
Java SE 10 2018 6.002
Java SE 11 2018 4.411
Java SE 12 2019 4.433
Java SE 13 2019 4.515

Obwohl regelmäßig Versionen von Java veröffentlicht wurden, waren sie für Programmierer nicht alle von gleicher Bedeutung: Java hat sich in Etappen weiterentwickelt.


2. Java 2

Der erste große Sprung nach vorne erfolgte mit der Veröffentlichung von JDK 1.2. Es gab dort so viele Innovationen, dass die Entwickler von Java es in Java 2 Platform Standard Edition oder kurz J2SE 1.2 umbenannten .

Die wichtigsten Neuerungen waren:

  • strictfpStichwort
  • Die Swing-Bibliothek zum Arbeiten mit Grafiken
  • Der JIT-Compiler, der die Ausführung von Java-Programmen beschleunigte
  • Eine riesige Sammlung
  • Volle Unicode-Unterstützung: Japanisch, Chinesisch und Koreanisch.

Heutzutage scheinen diese Innovationen nicht mehr so ​​groß zu sein, aber jedes große Projekt erwächst aus einem kleinen. Java wäre heute nicht so beliebt, wenn nicht vor 20 Jahren eine kleine Gruppe von Programmierern die Sprache ständig verbessert hätte.


3. Java 5

JDK 1.5 wurde im September 2004 veröffentlicht. Es brachte auch viele Neuerungen mit sich und verdiente daher einen neuen Namen: Anstelle der Versionen 1.5, 1.6 und 1.7 entschied man sich für die Versionen 5.0, 6.0 und 7.0. Der vollständige Name von JDK 1.5 war also Java 2 Standard Edition 5.0

Dieses Update beinhaltete Dinge, ohne die die Weiterentwicklung der Sprache nicht möglich gewesen wäre.

Anmerkungen . Die Hälfte der wichtigsten modernen Frameworks basiert auf Annotationen, von Spring und Hibernate bis hin zu JUnit.

Generika . Generika haben die Wirkung von Sammlungen (und noch viel mehr) auf ein neues Niveau gehoben. Der Code ist einfacher, kompakter und sicherer geworden.

Autoboxing/Unboxing ist die automatische Konvertierung zwischen primitiven Typen und ihren Wrapper-Typen. Dies erleichterte das Schreiben und Lesen von Code erheblich und machte Sammlungen noch beliebter.

Die foreachSchleife macht mittlerweile mindestens die Hälfte aller Schleifen aus, die Programmierer schreiben. Und natürlich ist es bei der Arbeit mit Sammlungen unverzichtbar.

Die Aufzählung ist ein weiteres nettes neues Feature. Dadurch lassen sich viele Dinge wunderbar vereinfachen.

Das sind nicht alle Neuerungen: Hunderte neue Klassen wurden hinzugefügt. Wichtig ist, dass es genau die richtigen Innovationen waren und der Popularität von Java einen weiteren kräftigen Schub verliehen haben.


4. Java 6

Java 6 ist für viele kleine Verbesserungen und den Verzicht auf die Zahl 2 im Namen bekannt: Es hieß nicht mehr „Java 2 Standard Edition 6.0“, sondern einfach „Java Standard Edition 6.0“.

Hier sind einige der interessanten Neuerungen:

Die Java Compiler API ermöglichte es, den Java-Compiler direkt aus dem Code aufzurufen. Das bedeutet, dass Ihr Programm jetzt Text generieren könnte, der Klassencode darstellt, ihn durch Aufrufen von Methoden der Java Compiler API kompilieren und dann sofort mit dem Aufrufen der Methoden der kompilierten Klasse beginnen könnte. Es gibt ganze Entwicklungsbereiche, in denen diese Fähigkeit das Leben enorm vereinfacht.

Es wurde möglich, JavaScript direkt in einem Java-Programm auszuführen . Diese Funktion wurde eingeführt, weil JavaSE 6 die Rhino-JavaScript-Engine enthielt.


5. Java 7

Java 7 wurde im Juli 2011 veröffentlicht. Es sollte viele Verbesserungen darin geben, aber die Programmierer schafften es nur, einen kleinen Teil des Geplanten hinzuzufügen. Insbesondere fügten sie Dinge hinzu wie:

Eine neue Bibliothek für die Arbeit mit Dateneingabe und -ausgabe. Es ist als New Input Output API bekannt und befindet sich im java.nioPaket.

Durch die automatische Typinferenz des Java-Compilers zur Kompilierungszeit müssen Programmierer weniger Code schreiben. Der Compiler wurde intelligenter, und das war erst der Anfang.

Die switch-Anweisung erhielt die Möglichkeit, Zeichenfolgen als Fallwerte zu verwenden.

Auch das automatische Ressourcenmanagement hat sich deutlich verbessert: Mit dem try-with-resourcesKonstrukt kann ein Java-Programm Datenströme für Sie schließen, wenn sie nicht mehr benötigt werden.

Es gab viele weitere Änderungen, die jedoch in unserem aktuellen Lernstadium von Java nicht so wichtig sind.


6. Java 8

Java 8 kam im März 2014 heraus und war Javas stärkstes aktuelles Update.

Programmierer erinnern sich vor allem an die Hinzufügung von Lambda-Ausdrücken und funktionalen Schnittstellen (die @FunctionalInterfaceAnnotation). Wir werden sie auf Level 21 untersuchen. Ihr Code wird nie wieder derselbe sein.

Auch für Sammlungen wurden Streams hinzugefügt, die es in Kombination mit Lambda-Ausdrücken ermöglichten, Code deutlich kompakter zu schreiben. Allerdings nicht immer viel besser lesbar.

Interessant.

Und die dritte große Änderung war die Einführung einer völlig neuen API für die Arbeit mit Datums- und Uhrzeitangaben in Java 8 – der Date Time API . Wir werden es in naher Zukunft untersuchen.


7. Java 9

Java 9 wurde im September 2017 veröffentlicht. Seitdem haben die Java-Entwickler beschlossen, häufiger neue Versionen zu veröffentlichen – alle sechs Monate. Sie waren wahrscheinlich beeindruckt von der Vorgehensweise der Entwickler des Google Chrome-Browsers.

Die Veröffentlichung von Java 9 konzentrierte sich mehr auf die Interna der Java-Maschine. Das Wichtigste, was es für normale Programmierer brachte, war die Möglichkeit, ein Programm in Module zu unterteilen. Dies ist sehr praktisch, wenn Sie Zehntausende Klassen haben oder wenn Ihr Code Plugins dynamisch entlädt.

Aber es wird uns in naher Zukunft wahrscheinlich wenig nützen.


8. Java 11

Sechs Monate nach der Veröffentlichung von Java 9 kam Java 10 heraus und weitere sechs Monate später kam Java 11 heraus.

In dieser Zeit wurden viele kleine Verbesserungen vorgenommen, aber Sie werden sich wahrscheinlich nur an zwei erinnern:

Es wurde Unterstützung für Unicode 10 hinzugefügt. Jetzt können Sie Emojis in Ihren Java-Programmen verwenden. Sie können mit ihnen auf die gleiche Weise arbeiten wie mit dem booleschen Typ:

Die Typinferenz wurde verbessert und das varSchlüsselwort , das Ihnen sicher gefallen wird, wurde angezeigt.

Jetzt können Sie Folgendes schreiben:

var str = "Hello";

Und der Compiler wandelt dies um in:

String str = "Hello";

Es gab aber auch einige Verluste. Die Entwickler von Java haben Bibliotheken wie JavaFX, Java EE und CORBA aus JDK 11 entfernt.


9. Bedeutung der Kompatibilität

Wenn eine neue Version veröffentlicht wird, möchten Programmierer oft bei Null anfangen. Denn wer will schon ein paar alte Fehler beheben, wenn er von Anfang an absolut sicher ist, wie der Code hätte geschrieben werden sollen?

Aber die Geschichte unterstützt einen solchen Ansatz nicht. Jedes Mal, wenn Programmierer eine neue Version eines Programms veröffentlichen, verwenden 90 % der Benutzer eine alte Version. Sie können die neuen Funktionen des Programms nutzen oder ignorieren, aber was Benutzer hassen, ist, wenn etwas, das früher gut funktioniert hat, nicht mehr funktioniert.

Viele großartige Produkte starben, als Programmierer neue Versionen veröffentlichten, die nicht kompatibel waren. Oder einfach, als sie große Veränderungen vorgenommen haben. Beispielsweise gefiel den Benutzern die Idee, in Windows 8 auf die Schaltfläche „Start“ zu verzichten, nicht. Die Veröffentlichung von Windows 10 brachte die Hälfte dessen zurück, was in Windows 8 entfernt wurde.

Darüber hinaus können Sie mit Windows Programme ausführen, die vor 20 Jahren für Windows 95 oder sogar vor 30 Jahren für MS DOS 3.0 geschrieben wurden – sie funktionieren. Dies ist einer der Gründe, warum Windows nach wie vor beliebt ist.

Und Java wäre nicht so beliebt wie es ist, wenn seinen Entwicklern die Kompatibilität egal wäre. Immer wenn es eine neue Version der Java-Maschine, eine neue Version des SDK oder größere Änderungen an Klassen gibt, funktioniert der gesamte seit Januar 1996 geschriebene Java-Code weiterhin.

Dies wird normalerweise dadurch erreicht, dass nur neue Methoden, Klassen und Pakete hinzugefügt werden, ohne etwas zu entfernen. Dieser Ansatz hat seine Vor- und Nachteile.

Einerseits schleppt Java eine Menge Ballast in Form von altem, suboptimalem und unnötigem Code mit sich herum. Andererseits kann Ihr in Java 11 geschriebenes Projekt immer eine in Java 8 geschriebene Bibliothek verwenden, die in Java 5 und Java 2 geschriebene Bibliotheken verwendet. Dieses Sammelsurium an Code funktioniert einwandfrei.

Mit der Sprache C++ können Bibliotheken, die sowohl für 32-Bit- als auch für 64-Bit-Plattformen kompiliert wurden, nicht im selben Projekt verwendet werden. Und Sie werden große Kopfschmerzen bekommen, wenn Sie plötzlich feststellen, dass der charin einer Bibliothek verwendete Typ ein Byte verwendet, während eine andere zwei Bytes verwendet.


10. Veraltet

Deshalb haben die Entwickler von Java beschlossen, nichts zu entfernen, sondern nur neue Klassen und Pakete hinzuzufügen. Aber wie lassen sie Programmierer wissen, dass es eine neue sinnvolle Alternative zu einer bestehenden suboptimalen Lösung gibt?

Dazu haben sie sich die @DeprecatedAnmerkung ausgedacht.

Wenn eine Methode oder Klasse veraltet ist, wird diese Anmerkung neben ihrer Deklaration hinzugefügt. Dies bedeutet, dass Programmierer davon abgehalten werden, den Code zu verwenden.

Sie können weiterhin eine veraltete Klasse oder Methode verwenden, dies wird jedoch nicht empfohlen.

Und wie oft tun Menschen Dinge, die nicht empfohlen werden? Fast immer 🙂

Viele Klassen sind seit 20 Jahren veraltet – sie wurden verwendet und werden immer noch verwendet. Die Leute kennen sie oder sie sind einfach praktisch. Es besteht jedoch die Gefahr, dass sie irgendwann entfernt werden, daher ist es besser, sie nicht zu verwenden.

Alle modernen IDEs, einschließlich IntelliJ IDEA, können die @DeprecatedAnnotation verarbeiten. Die Namen veralteter Klassen und Methoden werden in durchgestrichener Formatierung angezeigt. Etwas wie das:

Date date = new Date();
int day = date.getDay();

Veraltete Klassen sind sehr beliebt und oft im Code zu finden, daher werden wir uns bald einige davon ansehen.