1. A Java verzióinak története

A Java története 1991-ben kezdődik, amikor a Sun programozóinak egy csoportja úgy döntött, hogy létrehoz egy nyelvet kis eszközökhöz: TV távirányítók, kávéfőzők, kenyérpirítók, bankkártyák stb.

Ezeknek az eszközöknek a gyártói nagyon különböző processzorokat használtak termékeik vezérléséhez, ezért nagyon fontossá vált, hogy egy adott processzor vagy operációs rendszer architektúrájához kötődjenek.

A Java készítői úgy döntöttek, hogy a problémát két részre bontják: A programjaikat nem egy adott processzor gépi kódjába fordítják, hanem egy speciális köztes kódba. A közbenső kódot viszont egy speciális program, az úgynevezett virtuális gép hajtja végre .

A legtöbb programozó a számítógépet gépnek nevezi.

Érdekes.

A C++-t a Java nyelv alapjául vették, és jelentősen leegyszerűsítették és szabványosították. Ha a C++ lehetővé teszi, hogy valamit 10 módon csinálj, akkor a Java csak az egyiket tartotta meg. Bizonyos szempontból olyan volt, mint a hieroglifákról az ábécére való átmenet.

A Java első verziója 1996-ban jelent meg. Azóta a Java megkezdte diadalmas menetét a világ körül, ami viszont magának a nyelvnek a fejlődését és növekedését serkentette. Manapság több millió könyvtárat és milliárdnyi kódsort írnak Java nyelven, és a Java új verziói 6 havonta jelennek meg:

Név Év Osztályok száma
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

Noha a Java verziói rendszeresen megjelentek, nem mindegyiknek volt egyforma jelentősége a programozók számára: a Java illeszkedések és elindulások során fejlődött.


2. Java 2

Az első nagy ugrás a JDK 1.2 kiadásával történt. Annyi újítást tartalmazott, hogy a Java alkotói átkeresztelték Java 2 Platform Standard Edition-re vagy röviden J2SE 1.2-re.

A főbb újítások a következők voltak:

  • strictfpkulcsszó
  • A Swing könyvtár grafikai munkához
  • A JIT fordító, amely felgyorsította a Java programok végrehajtását
  • Hatalmas gyűjtemény
  • Teljes Unicode támogatás: japán, kínai és koreai.

Ma ezek az újítások nem tűnnek olyan nagynak, de minden nagy projekt egy kicsiből nő ki. A Java ma nem lenne olyan népszerű, ha a programozók egy kis csoportja nem fejlesztette volna folyamatosan a nyelvet 20 évvel ezelőtt.


3. Java 5

2004 szeptemberében jelent meg a JDK 1.5, amely szintén rengeteg újítást vezetett be, így nem tehetett róla, hogy megérdemelte az új nevet: az 1.5-ös, 1.6-os és 1.7-es verziók helyett az 5.0, 6.0 és 7.0 mellett döntöttek. Tehát a JDK 1.5 teljes neve Java 2 Standard Edition 5.0 volt

Ez a frissítés olyan dolgokat tartalmazott, amelyek nélkül a nyelv továbbfejlesztése nem jöhetett volna létre.

Annotációk . A főbb modern keretrendszerek fele annotációkra épül, a tavasztól és a hibernálttól a JUnitig.

Generikus szerek . A generikus termékek új magasságokba emelték a kollekciók (és még sok más) erejét. A kód egyszerűbb, kompaktabb és biztonságosabb lett.

Az Autoboxing/Unboxing egy automatikus átalakítás a primitív típusok és azok burkolótípusai között. Ez sokkal könnyebbé tette a kódírást és -olvasást, és még népszerűbbé tette a gyűjteményeket.

A foreachciklus a programozók által írt összes ciklus legalább felét teszi ki. És természetesen nélkülözhetetlen a kollekciókkal való munka során.

Az enum egy másik szép új funkció. Lehetővé teszi sok dolog gyönyörű egyszerűsítését.

Ez nem minden újítás: több száz új osztály került hozzáadásra. A lényeg az, hogy éppen a megfelelő újítások voltak, és újabb erőteljes lökést adtak a Java népszerűségének.


4. Java 6

A Java 6-ra számos apró fejlesztésről és a névben szereplő 2-es szám elhagyásáról emlékezünk: ez már nem „Java 2 Standard Edition 6.0”, hanem egyszerűen „Java Standard Edition 6.0” volt.

Íme néhány érdekes újítás:

A Java Compiler API lehetővé tette a Java fordító közvetlen meghívását a kódból. Ez azt jelenti, hogy a programja most képes előállítani az osztálykódot reprezentáló szöveget, lefordítani azt a Java Compiler API metódusainak meghívásával , majd azonnal megkezdheti a lefordított osztály metódusainak hívását. A fejlődésnek egész területei vannak, ahol ez a képesség nagyban leegyszerűsíti az életet.

Lehetővé vált a JavaScript futtatása közvetlenül egy Java programon belül. Ez a funkció azért jelent meg, mert a JavaSE 6 tartalmazta a Rhino JavaScript motort.


5. Java 7

A Java 7 2011 júliusában jelent meg. Állítólag sok fejlesztés történt benne, de a programozóknak csak egy kis részét sikerült hozzátenniük a tervezettnek. Különösen olyan dolgokat adtak hozzá, mint:

Egy új könyvtár az adatbevitellel és -kimenettel való munkához. A New Input Output API néven ismert a csomagban található java.nio.

A Java fordító automatikus típuskövetkeztetése fordítási időben lehetővé teszi a programozóknak, hogy kevesebb kódot írjanak. A fordító okosabb lett, és ez még csak a kezdet volt.

A switch utasítás lehetőséget kapott arra, hogy karakterláncokat kis- és nagybetűs értékként használjon.

Az automatikus erőforrás-kezelés is jelentősen javult: a konstrukcióval try-with-resourcesegy Java program lezárhatja az adatfolyamokat, amikor már nincs rájuk szükség.

Sok más változás is történt, de ezek nem olyan fontosak a Java tanulás jelenlegi szakaszában.


6. Java 8

A Java 8 2014 márciusában jelent meg, és a Java legújabb frissítése volt.

A programozók mindenekelőtt a lambda-kifejezések és a funkcionális interfészek (az annotáció) hozzáadásával emlékeznek rá @FunctionalInterface. A 21. szinten megvizsgáljuk őket. A kódja soha többé nem lesz ugyanaz.

A gyűjteményekhez adatfolyamokat is hozzáadtak, amelyek lambda kifejezésekkel kombinálva sokkal kompaktabb kódírást tettek lehetővé. Bár nem mindig sokkal olvashatóbb.

Érdekes.

A harmadik nagy változás pedig az volt, hogy a Java 8 egy teljesen új API-t vezetett be a dátumokkal és időpontokkal való munkavégzéshez – a Date Time API-t . A közeljövőben tanulmányozni fogjuk.


7. Java 9

A Java 9 2017 szeptemberében jelent meg. Ettől kezdve a Java alkotói úgy döntöttek, hogy gyakrabban – félévente – adnak ki új verziókat. Valószínűleg lenyűgözte őket a Google Chrome böngésző fejlesztői által alkalmazott megközelítés.

A Java 9 kiadás inkább a Java gép belső elemeire összpontosított. A legjelentősebb dolog, amit a hétköznapi programozók számára hozott, az volt, hogy egy programot modulokra oszthattak. Ez nagyon kényelmes, ha több tízezer osztályod van, vagy ha a kódod dinamikusan tölti ki a bővítményeket.

De valószínűleg nem sok hasznunkra válik a közeljövőben.


8. Java 11

Hat hónappal a Java 9 megjelenése után megjelent a Java 10, újabb hat hónappal később pedig a Java 11.

Ez idő alatt sok apró fejlesztés történt, de valószínűleg csak kettőre fog emlékezni:

Támogatta a Unicode 10-et. Most már használhatja a hangulatjeleket a Java-programokban. Ugyanúgy dolgozhat velük, mint a logikai típussal:

A típuskövetkeztetést javítottuk, és megjelent a varkulcsszó , amely biztosan tetszeni fog.

Most a következőket írhatod:

var str = "Hello";

És a fordító ezt konvertálja a következőre:

String str = "Hello";

De voltak veszteségek is. A Java alkotói kihagyták a JDK 11-ből az olyan könyvtárakat, mint a JavaFX, a Java EE és a CORBA.


9. A kompatibilitás jelentősége

Amikor egy új verzió megjelenik, a programozók gyakran a nulláról akarják kezdeni. Végül is ki akarja kijavítani egy csomó régi hibát, amikor teljesen biztos abban, hogy a kódot a kezdetektől fogva meg kellett volna írni?

De a történelem nem támogatja ezt a megközelítést. Minden alkalommal, amikor a programozók kiadnak egy program új verzióját, a felhasználók 90%-a egy régi verziót használ. Használhatják vagy figyelmen kívül hagyhatják a program új funkcióit, de a felhasználók azt utálják, ha valami, ami korábban jól működött, leáll.

Sok nagyszerű termék meghalt, amikor a programozók új, nem kompatibilis verziókat adtak ki. Vagy egyszerűen akkor, amikor jelentős változtatásokat hajtottak végre. Például a Windows 8 Start gombjának elhagyásának ötlete nem tetszett a felhasználóknak. A Windows 10 kiadása visszahozta a Windows 8-ból eltávolítottak felét.

Sőt, a Windows lehetővé teszi olyan programok futtatását, amelyeket 20 évvel ezelőtt írtak Windows 95-höz, vagy akár 30 éve írtak MS DOS 3.0-hoz – működni fognak. Ez az egyik oka annak, hogy a Windows továbbra is népszerű.

A Java pedig nem lenne olyan népszerű, mint amilyen, ha a fejlesztői nem törődnének a kompatibilitással. Bármikor, amikor megjelenik a Java gép új verziója, az SDK új verziója, vagy az osztályokon jelentős változtatásokat hajtanak végre, az 1996 januárja óta írt Java kód továbbra is működik.

Ez általában csak új metódusok, osztályok és csomagok hozzáadásával érhető el, anélkül, hogy bármit is eltávolítana. Ennek a megközelítésnek megvannak az előnyei és hátrányai.

Egyrészt a Java egy rakás poggyászt húz magával régi, szuboptimális és szükségtelen kódok formájában. Másrészt a Java 11-ben írt projektje mindig használhat olyan Java 8-ban írt könyvtárat, amely Java 5-ben és Java 2-ben írt könyvtárakat használ. Ez a kódhalmaz tökéletesen működik.

A C++ nyelvvel a 32 bites és 64 bites platformokra fordított könyvtárak nem használhatók ugyanabban a projektben. Hatalmas fejfájása lesz, ha hirtelen rájön, hogy az charegyik könyvtárban használt típus egy, míg a másik két bájtot használ.


10. Elavult

Ezért a Java készítői úgy döntöttek, hogy nem távolítanak el semmit, csak új osztályokat és csomagokat adnak hozzá. De hogyan tudatják a programozókkal, hogy van egy új, méltó alternatíva a meglévő szuboptimális megoldással szemben?

Ehhez kitalálták az @Deprecatedannotációt.

Ha egy metódus vagy osztály elavult, akkor ez a megjegyzés a deklaráció mellé kerül hozzáadásra. Ez azt jelenti, hogy a programozók elriasztják a kód használatát.

Továbbra is használhat elavult osztályt vagy metódust, de nem ajánlott.

És milyen gyakran tesznek olyan dolgokat az emberek, amelyeket nem ajánlanak? Szinte mindig 🙂

Sok osztály 20 éve elavult – használták és használják még mindig. Az emberek ismerik őket, vagy egyszerűen kényelmesek. De fennáll annak a veszélye, hogy valamikor eltávolítják őket, ezért jobb, ha nem használja őket.

Minden modern IDE, beleértve az IntelliJ IDEA-t is, képes kezelni a @Deprecatedmegjegyzéseket. Az elavult osztályok és metódusok nevei áthúzott formázással jelennek meg. Valami ilyesmi:

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

Az elavult osztályok nagyon népszerűek, és gyakran megtalálhatók a kódban, ezért hamarosan megvizsgálunk néhányat.