1. Historien om versionerne af Java

Javas historie begynder i 1991, da en gruppe Sun-programmører besluttede at skabe et sprog til små enheder: TV-fjernbetjeninger, kaffemaskiner, brødristere, bankkort og så videre.

Producenter af disse enheder brugte meget forskellige processorer til at kontrollere deres produkter, så det blev meget vigtigt at være bundet til arkitekturen af ​​en bestemt processor eller OS.

Javas skabere besluttede at dele problemet op i to dele: Deres programmer ville ikke blive kompileret i maskinkoden til en specifik processor, men i en speciel mellemkode. Til gengæld vil denne mellemkode blive udført af et specielt program kaldet en virtuel maskine .

De fleste programmører omtaler en computer som en maskine.

Interessant.

C++ blev taget som grundlag for Java-sproget og var stærkt forenklet og standardiseret. Hvis C++ lod dig gøre noget på 10 måder, så beholdt Java kun én af dem. På nogle måder var det ligesom overgangen fra hieroglyffer til et alfabet.

Den første version af Java blev udgivet i 1996. Siden da begyndte Java sin sejrsmarch rundt om i verden, hvilket igen stimulerede udviklingen og væksten af ​​selve sproget. I dag er millioner af biblioteker og milliarder af kodelinjer skrevet i Java, og nye versioner af Java udgives hver 6. måned:

Navn År Antal klasser
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

Selvom versioner af Java blev udgivet regelmæssigt, havde de ikke alle lige stor betydning for programmører: Java har udviklet sig i pasform og start.


2. Java 2

Det første store spring fremad skete med udgivelsen af ​​JDK 1.2. Det havde så mange innovationer der, at Javas skabere omdøbte det til Java 2 Platform Standard Edition eller J2SE 1.2 for kort.

De vigtigste nyskabelser var:

  • strictfpsøgeord
  • Swing-biblioteket til at arbejde med grafik
  • JIT-kompileren, som accelererede udførelse af Java-programmer
  • Et kæmpe sæt af samlinger
  • Fuld Unicode-understøttelse: japansk, kinesisk og koreansk.

I dag virker disse innovationer ikke så store, men hvert stort projekt vokser ud af et lille. Java ville ikke være så populær i dag, hvis en lille gruppe programmører ikke var blevet ved med at forbedre sproget for 20 år siden.


3. Java 5

JDK 1.5 blev udgivet i september 2004. Den introducerede også en masse innovationer, så den kunne ikke undgå at fortjene et nyt navn: i stedet for version 1.5, 1.6 og 1.7 besluttede de at bruge 5.0, 6.0 og 7.0. Så det fulde navn på JDK 1.5 var Java 2 Standard Edition 5.0

Denne opdatering inkluderede ting, uden hvilke sprogets videre udvikling ikke ville have været mulig.

Anmærkninger . Halvdelen af ​​de store moderne rammer er bygget på annoteringer, fra Spring og Hibernate til JUnit.

Generiske lægemidler . Generiske lægemidler har taget samlingernes kraft (og meget mere) til nye højder. Koden er blevet enklere, mere kompakt og mere sikker.

Autoboxing/unboxing er automatisk konvertering mellem primitive typer og deres indpakningstyper. Dette gjorde det meget nemmere at skrive og læse kode og gjorde samlinger endnu mere populære.

Sløjfen står nu for mindst halvdelen af ​​alle løkker, som programmører skriver foreach. Og det er selvfølgelig uundværligt, når man arbejder med kollektioner.

Enum er en anden fin ny funktion. Det tillader mange ting at blive smukt forenklet.

Det er ikke alle nyskabelserne: hundredvis af nye klasser blev tilføjet. Det vigtige er, at de var de helt rigtige innovationer og gav endnu et kraftigt løft til Javas popularitet.


4. Java 6

Java 6 huskes for et stort antal små forbedringer og opgivelsen af ​​nummer 2 i navnet: det var ikke længere "Java 2 Standard Edition 6.0", men blot "Java Standard Edition 6.0".

Her er nogle af de interessante nyskabelser:

Java Compiler API gjorde det muligt at kalde Java compileren direkte fra koden. Det betyder, at dit program nu kunne generere tekst, der repræsenterer klassekode, kompilere den ved at kalde metoder fra Java Compiler API og derefter straks begynde at kalde metoderne for den kompilerede klasse. Der er hele udviklingsområder, hvor denne evne i høj grad forenkler livet.

Det blev muligt at udføre JavaScript direkte inde i et Java-program. Denne funktion dukkede op, fordi JavaSE 6 inkluderede Rhino JavaScript-motoren.


5. Java 7

Java 7 blev udgivet i juli 2011. Der skulle være mange forbedringer i det, men programmørerne nåede kun at tilføje en lille del af det planlagte. Især tilføjede de ting som:

Et nyt bibliotek til at arbejde med datainput og -output. Kendt som New Input Output API , er den placeret i java.niopakken.

Java-kompilerens automatiske typeslutning på kompileringstidspunktet lader programmører skrive mindre kode. Compileren blev klogere, og det var kun begyndelsen.

Switch-sætningen fik muligheden for at bruge strenge som kasusværdier.

Automatisk ressourcestyring blev også væsentligt forbedret: Med try-with-resourceskonstruktionen kan et Java-program lukke datastrømme for dig, når de ikke længere er nødvendige.

Der var mange andre ændringer, men de er ikke så vigtige på vores nuværende stadium af at lære Java.


6. Java 8

Java 8 udkom i marts 2014 og var Javas stærkeste seneste opdatering.

Frem for alt husker programmører det for dets tilføjelse af lambda-udtryk og funktionelle grænseflader (annotationen @FunctionalInterface). Vi vil undersøge dem på niveau 21. Din kode bliver aldrig den samme igen.

Der blev også tilføjet streams til samlinger, hvilket i kombination med lambda-udtryk gjorde det muligt at skrive kode meget mere kompakt. Selvom det ikke altid er meget mere læseværdigt.

Interessant.

Og den tredje store ændring var Java 8's introduktion af en helt ny API til at arbejde med datoer og klokkeslæt - Date Time API . Vi vil studere det i den nærmeste fremtid.


7. Java 9

Java 9 blev udgivet i september 2017. Fra det tidspunkt har Javas skabere besluttet at udgive nye versioner oftere — hver sjette måned. De var sandsynligvis imponerede over den tilgang, som udviklerne af Google Chrome-browseren har valgt.

Java 9-udgivelsen fokuserede mere på det interne i Java-maskinen. Det vigtigste, det bragte for almindelige programmører, var evnen til at opdele et program i moduler. Dette er meget praktisk, når du har titusindvis af klasser, eller når din kode dynamisk fjerner plugins.

Men det vil nok være til lidt nytte for os i den nærmeste fremtid.


8. Java 11

Seks måneder efter udgivelsen af ​​Java 9 udkom Java 10, og yderligere seks måneder senere udkom Java 11.

En masse små forbedringer blev lavet i løbet af denne tid, men du vil sandsynligvis kun huske to:

Det tilføjede understøttelse af Unicode 10. Nu kan du bruge emojis i dine Java-programmer. Du kan arbejde med dem på samme måde, som du arbejder med den boolske type:

Typeslutning blev forbedret, og varsøgeordet , som du helt sikkert vil kunne lide, dukkede op.

Nu kan du skrive følgende:

var str = "Hello";

Og compileren konverterer dette til:

String str = "Hello";

Men der var også nogle tab. Javas skabere droppede biblioteker som JavaFX, Java EE og CORBA fra JDK 11.


9. Vigtigheden af ​​kompatibilitet

Når en ny version udgives, ønsker programmører ofte at starte fra bunden. Når alt kommer til alt, hvem har lyst til at rette en masse gamle fejl, når de er helt sikre på, hvordan koden skulle have været skrevet helt fra begyndelsen?

Men historien understøtter ikke en sådan tilgang. Hver gang programmører frigiver en ny version af et program, bruger 90 % af dets brugere en gammel version. De kan bruge eller ignorere programmets nye funktioner, men det, som brugerne hader, er, når noget, der plejede at fungere godt, holder op med at fungere.

Mange fantastiske produkter er døde, da programmører udgav nye versioner, der ikke var kompatible. Eller simpelthen når de lavede store ændringer. For eksempel appellerede ideen om at opgive Start-knappen i Windows 8 ikke til brugerne. Udgivelsen af ​​Windows 10 bragte halvdelen tilbage af det, der blev fjernet i Window 8.

Hvad mere er, giver Windows dig mulighed for at køre programmer skrevet for 20 år siden til Windows 95 eller endda skrevet for 30 år siden til MS DOS 3.0 – de vil fungere. Dette er en af ​​grundene til, at Windows forbliver populært.

Og Java ville ikke være så populær som det er, hvis dets udviklere var ligeglade med kompatibilitet. Hver gang der er en ny version af Java-maskinen, en ny version af SDK'et eller større ændringer i klasser, fortsætter al Java-koden, der er skrevet siden januar 1996, med at fungere.

Dette opnås normalt ved kun at tilføje nye metoder, klasser og pakker uden at fjerne noget. Denne tilgang har sine fordele og ulemper.

På den ene side slæber Java rundt på en masse bagage i form af gammel, suboptimal og unødvendig kode. På den anden side kan dit projekt skrevet i Java 11 altid bruge et bibliotek skrevet i Java 8, der bruger biblioteker skrevet i Java 5 og Java 2. Denne sammenblanding af kode vil fungere fint.

Med C++-sproget kan biblioteker, der er kompileret til både 32-bit og 64-bit platforme, ikke bruges i det samme projekt. Og du får en kæmpe hovedpine, hvis du pludselig opdager, at den chartype, der bruges i et bibliotek, bruger én byte, mens en anden bruger to bytes.


10. Udgået

Så Javas skabere besluttede ikke at fjerne noget, men kun at tilføje nye klasser og pakker. Men hvordan lader de programmører vide, at der er et nyt værdigt alternativ til en eksisterende suboptimal løsning?

For at gøre dette kom de med anmærkningen @Deprecated.

Hvis en metode eller klasse er forældet, tilføjes denne annotation ved siden af ​​dens erklæring. Det betyder, at programmører frarådes at bruge koden.

Du kan stadig bruge en forældet klasse eller metode, men det anbefales ikke.

Og hvor ofte gør folk ting, der ikke anbefales? Næsten altid 🙂

Mange klasser er blevet forældet i 20 år - de er blevet brugt og bliver stadig brugt. Folk kender dem, eller de er bare praktiske. Men der er en risiko for, at de bliver fjernet på et tidspunkt, så det er bedre ikke at bruge dem.

Alle moderne IDE'er, inklusive IntelliJ IDEA, kan håndtere @Deprecatedannoteringen. Navnene på forældede klasser og metoder vises ved hjælp af gennemstreget formatering. Noget som dette:

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

Forældede klasser er meget populære og findes ofte i kode, så vi vil snart se på nogle af dem.