1. Historik för versionerna av Java

Javas historia börjar 1991, när en grupp Sun-programmerare bestämde sig för att skapa ett språk för små enheter: TV-fjärrkontroller, kaffebryggare, brödrostar, bankkort och så vidare.

Tillverkare av dessa enheter använde väldigt olika processorer för att kontrollera sina produkter, så det blev väldigt viktigt att vara bunden till arkitekturen för en viss processor eller ett visst operativsystem.

Javas skapare bestämde sig för att dela upp problemet i två delar: Deras program skulle inte kompileras till maskinkoden för en specifik processor, utan till en speciell mellankod. I sin tur skulle den mellankoden exekveras av ett speciellt program som kallas en virtuell maskin .

De flesta programmerare hänvisar till en dator som en maskin.

Intressant.

C++ togs som grund för Java-språket och var kraftigt förenklat och standardiserat. Om C++ låter dig göra något på 10 sätt, så behöll Java bara ett av dem. På något sätt var det som övergången från hieroglyfer till ett alfabet.

Den första versionen av Java släpptes 1996. Sedan dess började Java sin triumferande marsch runt världen, vilket i sin tur stimulerade utvecklingen och tillväxten av själva språket. Idag skrivs miljontals bibliotek och miljarder rader kod i Java, och nya versioner av Java släpps var sjätte månad:

namn Å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

Även om versioner av Java släpptes regelbundet, hade de inte alla samma betydelse för programmerare: Java har utvecklats i passningar och startar.


2. Java 2

Det första stora steget framåt skedde med lanseringen av JDK 1.2. Det hade så många innovationer där att Javas skapare döpte om det till Java 2 Platform Standard Edition eller J2SE 1.2 för kort.

De viktigaste innovationerna var:

  • strictfpnyckelord
  • Swing-biblioteket för att arbeta med grafik
  • JIT-kompilatorn, som påskyndade exekveringen av Java-program
  • En stor samling samlingar
  • Fullständigt Unicode-stöd: japanska, kinesiska och koreanska.

Idag verkar dessa innovationer inte så stora, men varje stort projekt växer ur ett litet. Java skulle inte vara lika populärt idag om en liten grupp programmerare inte hade hållit på med att förbättra språket för 20 år sedan.


3. Java 5

JDK 1.5 släpptes i september 2004. Det introducerade också många innovationer, så det kunde inte låta bli att förtjäna ett nytt namn: istället för versionerna 1.5, 1.6 och 1.7 bestämde de sig för att använda 5.0, 6.0 och 7.0. Så det fullständiga namnet på JDK 1.5 var Java 2 Standard Edition 5.0

Denna uppdatering innehöll saker utan vilka språkets vidareutveckling inte hade varit möjlig.

Anteckningar . Hälften av de stora moderna ramverken är byggda på annoteringar, från Spring och Hibernate till JUnit.

Generika . Generika har tagit kraften i samlingar (och mycket mer) till nya höjder. Koden har blivit enklare, mer kompakt och säkrare.

Autoboxning/unboxing är automatisk konvertering mellan primitiva typer och deras omslagstyper. Detta gjorde det mycket lättare att skriva och läsa kod och gjorde samlingar ännu mer populära.

Slingan står nu för minst hälften av alla slingor som programmerare skriver foreach. Och självklart är det oumbärligt när man jobbar med kollektioner.

Enumen är en annan trevlig ny funktion . Det gör att många saker kan förenklas vackert.

Det här är inte alla innovationer: hundratals nya klasser lades till. Det viktiga är att de var precis rätt innovationer och gav ytterligare ett kraftfullt uppsving för Javas popularitet.


4. Java 6

Java 6 är ihågkommen för ett stort antal små förbättringar och övergivandet av nummer 2 i namnet: det var inte längre "Java 2 Standard Edition 6.0", utan helt enkelt "Java Standard Edition 6.0".

Här är några av de intressanta innovationerna:

Java Compiler API gjorde det möjligt att anropa Java-kompilatorn direkt från koden. Det betyder att ditt program nu kan generera text som representerar klasskod, kompilera den genom att anropa metoder för Java Compiler API och sedan omedelbart börja anropa metoderna för den kompilerade klassen. Det finns hela utvecklingsområden där denna förmåga avsevärt förenklar livet.

Det blev möjligt att köra JavaScript direkt i ett Java-program. Den här funktionen dök upp eftersom JavaSE 6 inkluderade Rhino JavaScript-motorn.


5. Java 7

Java 7 släpptes i juli 2011. Det var tänkt att det skulle finnas många förbättringar i det, men programmerarna lyckades bara lägga till en liten del av det som var planerat. I synnerhet lade de till saker som:

Ett nytt bibliotek för att arbeta med datainmatning och -utdata. Känd som New Input Output API , den finns i java.niopaketet.

Java-kompilatorns automatiska typinferens vid kompilering låter programmerare skriva mindre kod. Kompilatorn blev smartare, och det var bara början.

Switch-satsen fick möjligheten att använda strängar som kasusvärden.

Den automatiska resurshanteringen förbättrades också avsevärt: Med try-with-resourceskonstruktionen kan ett Java-program stänga dataströmmar åt dig när de inte längre behövs.

Det fanns många andra förändringar, men de är inte så viktiga i vårt nuvarande stadium av att lära sig Java.


6. Java 8

Java 8 kom ut i mars 2014 och var Javas starkaste senaste uppdatering.

Framför allt minns programmerare det för dess tillägg av lambda-uttryck och funktionella gränssnitt (kommentaren) @FunctionalInterface. Vi kommer att undersöka dem på nivå 21. Din kod kommer aldrig att bli densamma igen.

Strömmar tillkom även för samlingar, vilket i kombination med lambda-uttryck gjorde det möjligt att skriva kod mycket mer kompakt. Fast inte alltid så mycket mer läsvärd.

Intressant.

Och den tredje stora förändringen var Java 8:s introduktion av ett helt nytt API för att arbeta med datum och tider – Date Time API . Vi kommer att studera det inom en snar framtid.


7. Java 9

Java 9 släpptes i september 2017. Sedan dess har Javas skapare beslutat att släppa nya versioner oftare — var sjätte månad. De var förmodligen imponerade av det tillvägagångssätt som utvecklarna av webbläsaren Google Chrome antog.

Java 9-utgåvan fokuserade mer på det interna i Java-maskinen. Det viktigaste som det gav vanliga programmerare var möjligheten att dela upp ett program i moduler. Detta är väldigt praktiskt när du har tiotusentals klasser eller när din kod dynamiskt tar bort plugins.

Men det kommer nog att vara till liten nytta för oss inom en snar framtid.


8. Java 11

Sex månader efter lanseringen av Java 9 kom Java 10 och ytterligare sex månader senare kom Java 11.

Många små förbättringar gjordes under den här tiden, men du kommer troligen bara att minnas två:

Det lade till stöd för Unicode 10. Nu kan du använda emojis i dina Java-program. Du kan arbeta med dem på samma sätt som du arbetar med den booleska typen:

Typinferens förbättrades och varsökordet , som du säkert kommer att gilla, dök upp.

Nu kan du skriva följande:

var str = "Hello";

Och kompilatorn konverterar detta till:

String str = "Hello";

Men det blev också några förluster. Javas skapare släppte bibliotek som JavaFX, Java EE och CORBA från JDK 11.


9. Betydelsen av kompatibilitet

När en ny version släpps vill programmerare ganska ofta börja om från början. När allt kommer omkring, vem vill fixa ett gäng gamla buggar när de är absolut positiva till hur koden borde ha skrivits från första början?

Men historien stöder inte ett sådant tillvägagångssätt. Varje gång programmerare släpper en ny version av ett program, använder 90 % av dess användare en gammal version. De kan använda eller ignorera programmets nya funktioner, men vad användarna hatar är när något som tidigare fungerade bra slutar fungera.

Många bra produkter har dött när programmerare släppt nya versioner som inte var kompatibla. Eller helt enkelt när de gjorde stora förändringar. Till exempel, idén om att överge Start-knappen i Windows 8 tilltalade inte användarna. Utgivningen av Windows 10 tog tillbaka hälften av det som togs bort i fönster 8.

Dessutom låter Windows dig köra program som skrevs för 20 år sedan för Windows 95 eller till och med skrivna för 30 år sedan för MS DOS 3.0 - de kommer att fungera. Detta är en av anledningarna till att Windows fortfarande är populärt.

Och Java skulle inte vara så populärt som det är om dess utvecklare inte brydde sig om kompatibilitet. Varje gång det finns en ny version av Java-maskinen, en ny version av SDK eller större ändringar av klasser, fortsätter all Java-kod som skrivits sedan januari 1996 att fungera.

Detta uppnås vanligtvis genom att bara lägga till nya metoder, klasser och paket, utan att ta bort något. Detta tillvägagångssätt har sina för- och nackdelar.

Å ena sidan släpar Java runt en massa bagage i form av gammal, suboptimal och onödig kod. Å andra sidan, ditt projekt skrivet i Java 11 kan alltid använda ett bibliotek skrivet i Java 8 som använder bibliotek skrivna i Java 5 och Java 2. Denna kodklump kommer att fungera utmärkt.

Med språket C++ kan bibliotek som kompilerats för både 32-bitars och 64-bitars plattformar inte användas i samma projekt. Och du kommer att få en enorm huvudvärk om du plötsligt upptäcker att typen charsom används i ett bibliotek använder en byte, medan en annan använder två byte.


10. Utfasad

Så Javas skapare bestämde sig för att inte ta bort någonting, utan bara att lägga till nya klasser och paket. Men hur låter de programmerare veta att det finns ett nytt värdigt alternativ till en befintlig suboptimal lösning?

För att göra detta kom de med anteckningen @Deprecated.

Om någon metod eller klass är utfasad läggs den här anteckningen till bredvid dess deklaration. Det betyder att programmerare avskräcks från att använda koden.

Du kan fortfarande använda en föråldrad klass eller metod, men det rekommenderas inte.

Och hur ofta gör folk saker som inte rekommenderas? Nästan alltid 🙂

Många klasser har blivit utfasade i 20 år — de har använts och används fortfarande. Folk är bekanta med dem eller så är de bara bekväma. Men det finns en risk att de tas bort någon gång, så det är bättre att inte använda dem.

Alla moderna IDE, inklusive IntelliJ IDEA, kan hantera @Deprecatedanteckningen. Namnen på föråldrade klasser och metoder visas med genomstruken formatering. Något som det här:

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

Utfasade klasser är mycket populära och finns ofta i kod, så vi kommer att titta på några av dem snart.