1. Historien om versjonene av Java

Javas historie begynner i 1991, da en gruppe Sun-programmerere bestemte seg for å lage et språk for små enheter: TV-fjernkontroller, kaffetraktere, brødristere, bankkort og så videre.

Produsenter av disse enhetene brukte svært forskjellige prosessorer for å kontrollere produktene sine, så det ble veldig viktig å være knyttet til arkitekturen til en bestemt prosessor eller OS.

Javas skapere bestemte seg for å dele problemet i to deler: Programmene deres ville ikke bli kompilert inn i maskinkoden for en bestemt prosessor, men i en spesiell mellomkode. På sin side vil den mellomliggende koden bli utført av et spesielt program kalt en virtuell maskin .

De fleste programmerere omtaler en datamaskin som en maskin.

Interessant.

C++ ble tatt som grunnlag for Java-språk og ble sterkt forenklet og standardisert. Hvis C++ lar deg gjøre noe på 10 måter, beholdt Java bare én av dem. På noen måter var det som overgangen fra hieroglyfer til et alfabet.

Den første versjonen av Java ble utgitt i 1996. Siden den gang begynte Java sin triumferende marsj rundt om i verden, som igjen stimulerte utviklingen og veksten av selve språket. I dag er millioner av biblioteker og milliarder av kodelinjer skrevet i Java, og nye versjoner av Java utgis hver sjette måned:

Navn År Antall 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 4024
Java SE 8 2014 4.240
Java SE 9 2017 6005
Java SE 10 2018 6002
Java SE 11 2018 4.411
Java SE 12 2019 4.433
Java SE 13 2019 4.515

Selv om versjoner av Java ble utgitt regelmessig, hadde de ikke alle like stor betydning for programmerere: Java har utviklet seg i pass og starter.


2. Java 2

Det første store spranget fremover skjedde med utgivelsen av JDK 1.2. Det hadde så mange innovasjoner der at Javas skapere ga det nytt navn til Java 2 Platform Standard Edition eller J2SE 1.2 for kort.

De viktigste nyvinningene var:

  • strictfpnøkkelord
  • Swing-biblioteket for arbeid med grafikk
  • JIT-kompilatoren, som akselererte kjøringen av Java-programmer
  • Et stort sett med samlinger
  • Full Unicode-støtte: japansk, kinesisk og koreansk.

I dag virker ikke disse innovasjonene så store, men hvert stort prosjekt vokser ut av et lite. Java ville ikke vært like populært i dag hvis en liten gruppe programmerere ikke hadde holdt på å forbedre språket for 20 år siden.


3. Java 5

JDK 1.5 ble utgitt i september 2004. Den introduserte også mange innovasjoner, så den kunne ikke annet enn å fortjene et nytt navn: i stedet for versjonene 1.5, 1.6 og 1.7 bestemte de seg for å bruke 5.0, 6.0 og 7.0. Så det fulle navnet til JDK 1.5 var Java 2 Standard Edition 5.0

Denne oppdateringen inkluderte ting uten hvilke språkets videre utvikling ikke ville vært mulig.

Merknader . Halvparten av de store moderne rammeverkene er bygget på merknader, fra Spring og Hibernate til JUnit.

Generiske legemidler . Generika har tatt kraften til samlinger (og mye mer) til nye høyder. Koden er blitt enklere, mer kompakt og sikrere.

Autoboxing/unboxing er automatisk konvertering mellom primitive typer og deres innpakningstyper. Dette gjorde det mye lettere å skrive og lese kode, og samlingene ble enda mer populære.

Løkken foreachstår nå for minst halvparten av alle løkker som programmerere skriver. Og selvfølgelig er det uunnværlig når man jobber med samlinger.

Enum er en annen fin ny funksjon. Det lar mange ting bli vakkert forenklet.

Dette er ikke alle innovasjonene: hundrevis av nye klasser ble lagt til. Det viktige er at de var akkurat de rette innovasjonene, og ga enda et kraftig løft til Javas popularitet.


4. Java 6

Java 6 huskes for et stort antall små forbedringer og forlatelsen av nummer 2 i navnet: det var ikke lenger "Java 2 Standard Edition 6.0", men ganske enkelt "Java Standard Edition 6.0".

Her er noen av de interessante nyvinningene:

Java Compiler API gjorde det mulig å kalle Java-kompilatoren direkte fra koden. Det betyr at programmet ditt nå kan generere tekst som representerer klassekode, kompilere den ved å kalle metoder for Java Compiler API , og deretter umiddelbart begynne å kalle metodene til den kompilerte klassen. Det er hele utviklingsområder hvor denne evnen i stor grad forenkler livet.

Det ble mulig å kjøre JavaScript direkte i et Java-program. Denne funksjonen dukket opp fordi JavaSE 6 inkluderte Rhino JavaScript-motoren.


5. Java 7

Java 7 ble utgitt i juli 2011. Det skulle være mange forbedringer i den, men programmererne klarte bare å legge til en liten del av det som var planlagt. Spesielt la de til ting som:

Et nytt bibliotek for arbeid med datainngang og -utgang. Kjent som New Input Output API , ligger den i java.niopakken.

Java-kompilatorens automatiske typeslutning på kompileringstidspunktet lar programmerere skrive mindre kode. Kompilatoren ble smartere, og det var bare begynnelsen.

Switch-setningen fikk muligheten til å bruke strenger som kasusverdier.

Automatisk ressursadministrasjon ble også betydelig forbedret: Med konstruksjonen try-with-resourceskan et Java-program lukke datastrømmer for deg når de ikke lenger er nødvendige.

Det var mange andre endringer, men de er ikke så viktige på vårt nåværende stadium av å lære Java.


6. Java 8

Java 8 kom ut i mars 2014 og var Javas sterkeste nylige oppdatering.

Fremfor alt husker programmerere det for tillegget av lambda-uttrykk og funksjonelle grensesnitt (kommentaren @FunctionalInterface). Vi vil undersøke dem på nivå 21. Koden din vil aldri bli den samme igjen.

Det ble også lagt til strømmer for samlinger, som i kombinasjon med lambda-uttrykk gjorde det mulig å skrive kode mye mer kompakt. Selv om det ikke alltid er mye mer lesbart.

Interessant.

Og den tredje store endringen var Java 8s introduksjon av et helt nytt API for arbeid med datoer og klokkeslett – Date Time API . Vi vil studere det i nær fremtid.


7. Java 9

Java 9 ble utgitt i september 2017. Fra den tiden har Javas skapere bestemt seg for å gi ut nye versjoner oftere — hver sjette måned. De var sannsynligvis imponert over tilnærmingen som ble brukt av utviklerne av Google Chrome-nettleseren.

Java 9-utgivelsen fokuserte mer på det indre av Java-maskinen. Det viktigste det ga vanlige programmerere var muligheten til å dele et program inn i moduler. Dette er veldig praktisk når du har titusenvis av klasser eller når koden din dynamisk laster ut plugins.

Men det kommer nok til lite nytte for oss i nærmeste fremtid.


8. Java 11

Seks måneder etter utgivelsen av Java 9 kom Java 10, og ytterligere seks måneder senere kom Java 11.

Mange små forbedringer ble gjort i løpet av denne tiden, men du vil sannsynligvis bare huske to:

Den la til støtte for Unicode 10. Nå kan du bruke emojis i Java-programmene dine. Du kan jobbe med dem på samme måte som du jobber med den boolske typen:

Typeslutning ble forbedret, og varsøkeordet , som du garantert vil like, dukket opp.

Nå kan du skrive følgende:

var str = "Hello";

Og kompilatoren konverterer dette til:

String str = "Hello";

Men det ble også noen tap. Javas skapere droppet biblioteker som JavaFX, Java EE og CORBA fra JDK 11.


9. Viktigheten av kompatibilitet

Når en ny versjon er utgitt, ønsker programmerere ganske ofte å starte fra bunnen av. Tross alt, hvem vil fikse en haug med gamle feil når de er absolutt positive til hvordan koden burde vært skrevet helt fra begynnelsen?

Men historien støtter ikke en slik tilnærming. Hver gang programmerere slipper en ny versjon av et program, bruker 90 % av brukerne en gammel versjon. De kan bruke eller ignorere programmets nye funksjoner, men det brukere hater er når noe som tidligere fungerte bra slutter å fungere.

Mange flotte produkter har dødd da programmerere ga ut nye versjoner som ikke var kompatible. Eller rett og slett når de gjorde store endringer. For eksempel appellerte ikke ideen om å forlate Start-knappen i Windows 8 brukere. Utgivelsen av Windows 10 brakte tilbake halvparten av det som ble fjernet i Window 8.

Dessuten lar Windows deg kjøre programmer skrevet for 20 år siden for Windows 95 eller til og med skrevet for 30 år siden for MS DOS 3.0 – de vil fungere. Dette er en av grunnene til at Windows fortsatt er populært.

Og Java ville ikke vært så populært som det er hvis utviklerne ikke brydde seg om kompatibilitet. Hver gang det er en ny versjon av Java-maskinen, en ny versjon av SDK eller større endringer i klasser, fortsetter all Java-koden skrevet siden januar 1996 å fungere.

Dette oppnås vanligvis ved å bare legge til nye metoder, klasser og pakker, uten å fjerne noe. Denne tilnærmingen har sine fordeler og ulemper.

På den ene siden drar Java rundt en haug med bagasje i form av gammel, suboptimal og unødvendig kode. På den annen side kan prosjektet ditt skrevet i Java 11 alltid bruke et bibliotek skrevet i Java 8 som bruker biblioteker skrevet i Java 5 og Java 2. Denne kodebiten vil fungere helt fint.

Med C++-språket kan ikke biblioteker kompilert for både 32-biters og 64-biters plattformer brukes i samme prosjekt. Og du vil få en enorm hodepine hvis du plutselig oppdager at typen charsom brukes i ett bibliotek bruker én byte, mens en annen bruker to byte.


10. Utdatert

Så Javas skapere bestemte seg for ikke å fjerne noe, men bare å legge til nye klasser og pakker. Men hvordan lar de programmerere få vite at det finnes et nytt verdig alternativ til en eksisterende suboptimal løsning?

For å gjøre dette kom de med @Deprecatedmerknaden.

Hvis en metode eller klasse er utdatert, legges denne merknaden til ved siden av erklæringen. Det betyr at programmerere frarådes å bruke koden.

Du kan fortsatt bruke en utdatert klasse eller metode, men det anbefales ikke.

Og hvor ofte gjør folk ting som ikke anbefales? Nesten alltid 🙂

Mange klasser har blitt avviklet i 20 år - de har blitt brukt og brukes fortsatt. Folk er kjent med dem, eller de er bare praktiske. Men det er en risiko for at de blir fjernet på et tidspunkt, så det er bedre å ikke bruke dem.

Alle moderne IDE-er, inkludert IntelliJ IDEA, kan håndtere @Deprecatedmerknaden. Navnene på utdaterte klasser og metoder vises med gjennomstrekingsformatering . Noe sånt som dette:

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

Utdaterte klasser er veldig populære og finnes ofte i kode, så vi skal se på noen av dem snart.