1. Geschiedenis van de versies van Java

De geschiedenis van Java begint in 1991, toen een groep Sun-programmeurs besloot een taal te maken voor kleine apparaten: tv-afstandsbedieningen, koffiezetapparaten, broodroosters, bankpassen, enzovoort.

Fabrikanten van deze apparaten gebruikten heel verschillende processors om hun producten te besturen, dus het werd erg belangrijk om gebonden te zijn aan de architectuur van een bepaalde processor of besturingssysteem.

De makers van Java besloten het probleem in twee delen op te splitsen: hun programma's zouden niet in de machinecode voor een specifieke processor worden gecompileerd, maar in een speciale tussencode. Die tussenliggende code zou op zijn beurt worden uitgevoerd door een speciaal programma dat een virtuele machine wordt genoemd .

De meeste programmeurs noemen een computer een machine.

Interessant.

C ++ werd als basis voor de Java-taal genomen en werd sterk vereenvoudigd en gestandaardiseerd. Als je met C++ iets op 10 manieren kon doen, behield Java er maar één van. In sommige opzichten leek het op de overgang van hiërogliefen naar een alfabet.

De eerste versie van Java kwam uit in 1996. Sindsdien begon Java aan zijn triomfantelijke mars rond de wereld, wat op zijn beurt de evolutie en groei van de taal zelf stimuleerde. Tegenwoordig worden miljoenen bibliotheken en miljarden regels code in Java geschreven en worden er elke zes maanden nieuwe versies van Java uitgebracht:

Naam Jaar Aantal 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

Hoewel er regelmatig versies van Java werden uitgebracht, waren ze niet allemaal even belangrijk voor programmeurs: Java is met horten en stoten geëvolueerd.


2. Java2

De eerste grote sprong voorwaarts vond plaats met de release van JDK 1.2. Het had daar zoveel innovaties dat de makers van Java het de naam Java 2 Platform Standard Edition of kortweg J2SE 1.2 gaven.

De belangrijkste vernieuwingen waren:

  • strictfptrefwoord
  • De Swing-bibliotheek voor het werken met afbeeldingen
  • De JIT-compiler, die de uitvoering van Java-programma's versnelde
  • Een enorme verzameling collecties
  • Volledige Unicode-ondersteuning: Japans, Chinees en Koreaans.

Tegenwoordig lijken deze innovaties niet zo groot, maar elk groot project komt voort uit een klein project. Java zou vandaag de dag niet zo populair zijn als een kleine groep programmeurs de taal 20 jaar geleden niet was blijven verbeteren.


3. Java5

JDK 1.5 werd uitgebracht in september 2004. Het introduceerde ook veel innovaties, dus het kon niet anders dan een nieuwe naam verdienen: in plaats van versies 1.5, 1.6 en 1.7 besloten ze om 5.0, 6.0 en 7.0 te gebruiken. De volledige naam van JDK 1.5 was dus Java 2 Standard Edition 5.0

Deze update bevatte dingen zonder welke de verdere ontwikkeling van de taal niet mogelijk zou zijn geweest.

Annotaties . De helft van de grote moderne frameworks is gebouwd op annotaties, van Spring en Hibernate tot JUnit.

Generieken . Generieke geneesmiddelen hebben de kracht van collecties (en nog veel meer) naar nieuwe hoogten getild. De code is eenvoudiger, compacter en veiliger geworden.

Autoboxing/unboxing is automatische conversie tussen primitieve typen en hun wikkeltypes. Dit maakte het veel gemakkelijker om code te schrijven en te lezen, en maakte collecties nog populairder.

De foreachlus is nu goed voor minstens de helft van alle lussen die programmeurs schrijven. En natuurlijk is het onmisbaar bij het werken met verzamelingen.

De enum is een andere leuke nieuwe functie. Hiermee kunnen veel dingen prachtig worden vereenvoudigd.

Dit zijn niet alle innovaties: er zijn honderden nieuwe klassen toegevoegd. Het belangrijkste is dat het precies de juiste innovaties waren en de populariteit van Java nog een krachtige boost gaven.


4. Java6

Java 6 wordt herinnerd vanwege een groot aantal kleine verbeteringen en het verlaten van het cijfer 2 in de naam: het was niet langer "Java 2 Standard Edition 6.0", maar simpelweg "Java Standard Edition 6.0".

Hier zijn enkele van de interessante innovaties:

De Java Compiler API maakte het mogelijk om de Java-compiler rechtstreeks vanuit de code aan te roepen. Dat betekent dat uw programma nu tekst kan genereren die klassecode vertegenwoordigt, deze kan compileren door methoden van de Java Compiler API aan te roepen en vervolgens onmiddellijk de methoden van de gecompileerde klasse kan aanroepen. Er zijn hele ontwikkelingsgebieden waar dit vermogen het leven enorm vereenvoudigt.

Het werd mogelijk om JavaScript rechtstreeks in een Java-programma uit te voeren. Deze functie is verschenen omdat JavaSE 6 de Rhino JavaScript-engine bevatte.


5. Java7

In juli 2011 kwam Java 7 uit. Er zouden veel verbeteringen in zitten, maar de programmeurs slaagden er maar in om een ​​klein deel toe te voegen van wat gepland was. Ze voegden met name dingen toe als:

Een nieuwe bibliotheek voor het werken met gegevensinvoer en -uitvoer. Deze staat bekend als de nieuwe invoer-uitvoer-API en bevindt zich in het java.niopakket.

Door de automatische type-inferentie van de Java-compiler tijdens het compileren kunnen programmeurs minder code schrijven. De compiler werd slimmer en dat was nog maar het begin.

De switch-instructie kreeg de mogelijkheid om tekenreeksen als hoofdletterwaarden te gebruiken.

Ook het automatische beheer van bronnen is aanzienlijk verbeterd: met de try-with-resourcesconstructie kan een Java-programma gegevensstromen voor u afsluiten wanneer deze niet langer nodig zijn.

Er waren veel andere veranderingen, maar die zijn niet zo belangrijk in onze huidige leerfase van Java.


6. Java8

Java 8 kwam uit in maart 2014 en was Java's sterkste recente update.

Programmeurs onthouden het vooral vanwege de toevoeging van lambda-expressies en functionele interfaces (de @FunctionalInterfaceannotatie). We zullen ze onderzoeken op niveau 21. Je code zal nooit meer hetzelfde zijn.

Ook zijn er streams toegevoegd voor collecties, wat het in combinatie met lambda-expressies mogelijk maakte om veel compacter code te schrijven. Hoewel niet altijd veel leesbaarder.

Interessant.

En de derde grote verandering was de introductie van Java 8 van een geheel nieuwe API voor het werken met datums en tijden: de Date Time API . We zullen het de komende tijd bestuderen.


7. Java 9

Java 9 is uitgebracht in september 2017. Vanaf dat moment hebben de makers van Java besloten om vaker nieuwe versies uit te brengen - elke zes maanden. Ze waren waarschijnlijk onder de indruk van de aanpak van de ontwikkelaars van de Google Chrome-browser.

De release van Java 9 was meer gericht op de interne onderdelen van de Java-machine. Het belangrijkste dat het voor gewone programmeurs opleverde, was de mogelijkheid om een ​​programma in modules te verdelen. Dit is erg handig wanneer u tienduizenden klassen hebt of wanneer uw code plug-ins dynamisch ontlaadt.

Maar daar zullen we in de nabije toekomst waarschijnlijk weinig aan hebben.


8. Java 11

Zes maanden na de release van Java 9 kwam Java 10 uit en nog eens zes maanden later kwam Java 11 uit.

Gedurende deze tijd zijn er veel kleine verbeteringen aangebracht, maar u zult zich er waarschijnlijk maar twee herinneren:

Het voegde ondersteuning toe voor Unicode 10. Nu kunt u emoji's gebruiken in uw Java-programma's. U kunt ermee werken op dezelfde manier als u met het booleaanse type werkt:

Type-inferentie is verbeterd en het vartrefwoord , dat u zeker leuk zult vinden, verscheen.

Nu kun je het volgende schrijven:

var str = "Hello";

En de compiler converteert dit naar:

String str = "Hello";

Maar er waren ook enkele verliezen. De makers van Java hebben bibliotheken zoals JavaFX, Java EE en CORBA uit JDK 11 verwijderd.


9. Belang van compatibiliteit

Als er een nieuwe versie uitkomt, willen programmeurs vaak helemaal opnieuw beginnen. Immers, wie wil er een heleboel oude bugs oplossen als ze er absoluut zeker van zijn hoe de code vanaf het allereerste begin had moeten worden geschreven?

Maar de geschiedenis ondersteunt zo'n benadering niet. Elke keer dat programmeurs een nieuwe versie van een programma uitbrengen, gebruikt 90% van de gebruikers een oude versie. Ze kunnen de nieuwe functies van het programma gebruiken of negeren, maar wat gebruikers haten, is wanneer iets dat vroeger goed werkte, niet meer werkt.

Veel geweldige producten zijn gestorven toen programmeurs nieuwe versies uitbrachten die niet compatibel waren. Of gewoon wanneer ze grote veranderingen hebben doorgevoerd. Het idee om de Start-knop in Windows 8 los te laten, sprak gebruikers bijvoorbeeld niet aan. De release van Windows 10 bracht de helft terug van wat in Windows 8 was verwijderd.

Bovendien kunt u met Windows programma's uitvoeren die 20 jaar geleden zijn geschreven voor Windows 95 of zelfs 30 jaar geleden zijn geschreven voor MS DOS 3.0 - ze zullen werken. Dit is een van de redenen waarom Windows zo populair blijft.

En Java zou niet zo populair zijn als het is als de ontwikkelaars zich niets aantrekken van compatibiliteit. Elke keer dat er een nieuwe versie van de Java-machine is, een nieuwe versie van de SDK of grote wijzigingen in klassen, blijft alle Java-code die sinds januari 1996 is geschreven, werken.

Dit wordt meestal bereikt door alleen nieuwe methoden, klassen en pakketten toe te voegen, zonder iets te verwijderen. Deze aanpak heeft zijn voor- en nadelen.

Enerzijds sleept Java een hoop bagage met zich mee in de vorm van oude, suboptimale en onnodige code. Aan de andere kant kan uw project geschreven in Java 11 altijd een bibliotheek gebruiken die is geschreven in Java 8 die bibliotheken gebruikt die zijn geschreven in Java 5 en Java 2. Deze mengelmoes van code zal prima werken.

Met de C++-taal kunnen bibliotheken die zijn gecompileerd voor zowel 32-bits als 64-bits platforms niet in hetzelfde project worden gebruikt. En je zult een enorme hoofdpijn krijgen als je plotseling ontdekt dat het chartype dat in de ene bibliotheek wordt gebruikt, één byte gebruikt, terwijl een andere twee bytes gebruikt.


10. Verouderd

Dus besloten de makers van Java niets te verwijderen, maar alleen nieuwe klassen en pakketten toe te voegen. Maar hoe laten ze programmeurs weten dat er een nieuw waardig alternatief is voor een bestaande suboptimale oplossing?

Om dit te doen, bedachten ze de @Deprecatedannotatie.

Als een methode of klasse verouderd is, wordt deze annotatie naast de declaratie toegevoegd. Het betekent dat programmeurs worden ontmoedigd om de code te gebruiken.

U kunt nog steeds een verouderde klasse of methode gebruiken, maar dit wordt niet aanbevolen.

En hoe vaak doen mensen dingen die niet worden aanbevolen? Bijna altijd 🙂

Veel klassen zijn al 20 jaar verouderd — ze zijn gebruikt en worden nog steeds gebruikt. Mensen zijn er bekend mee of ze zijn gewoon handig. Maar het risico bestaat dat ze op een gegeven moment worden verwijderd, dus het is beter om ze niet te gebruiken.

Alle moderne IDE's, inclusief IntelliJ IDEA, kunnen de @Deprecatedannotatie aan. De namen van verouderde klassen en methoden worden weergegeven met doorgestreepte opmaak. Iets zoals dit:

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

Verouderde klassen zijn erg populair en worden vaak in code aangetroffen, dus we zullen er binnenkort naar kijken.