Jáva | ||
Az első változat kelte | 1995 | |
---|---|---|
Paradigma | Objektumorientált , strukturált , elengedhetetlen , funkcionális | |
Szerző | Sun Microsystems | |
Fejlesztők | Oracle Corporation | |
Utolsó verzió | Java SE 16.0.1 ( 2021. április 20) | |
Gépelés | Statikus , erős , biztonságos , nominatív | |
Befolyásolta | C-objektív , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Befolyásolt | C # , J # , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , Feldolgozás | |
Végrehajtások | JVM lista | |
Operációs rendszer | Többplatformos | |
Engedély | GNU GPLV2 + CPE | |
Weboldal | www.oracle.com/java/technologies | |
Fájlkiterjesztés | java, class, jar, jad és jmod | |
Java egy objektumorientált programozási nyelv által létrehozott James Gosling és Patrick Naughton , alkalmazottai Sun Microsystems , a támogatást a Bill Joy (társ-alapítója a Sun Microsystems a 1982 ), hivatalosan bemutatott 1995. május 23a SunWorld-nél .
A Sun céget ezután 2009-ben megvásárolta az Oracle vállalat, amely ma már birtokolja és fenntartja a Java-t .
A különlegessége az, hogy a Java szoftver írva e nyelven összeállított egy köztes bináris ami lehet végrehajtani a Java Virtual Machine (JVM), tekintet nélkül az operációs rendszer .
A Java nyelv nagyrészt átveszi a C ++ nyelv szintaxisát . Ennek ellenére a Java-t megfosztották a C ++ legfinomabb fogalmaitól, és a legzavaróbbaktól is, például mutatókat és hivatkozásokat, vagy az interfészek megvalósításával megkerülte a többszörös öröklődést . Hasonlóképpen, a 8. verzió óta a funkcionális interfészek érkezése többszörös öröklődést vezet be (az attribútumok kezelése nélkül) előnyeivel és hátrányaival, például a gyémánt öröklésével . A tervezők az objektum-orientált megközelítést részesítették előnyben , hogy a Java-ban minden objektum legyen, kivéve a primitív típusokat ( egész számok , lebegőpontos számok stb.), Amelyeknek azonban megvannak a változatai, amelyek öröklődnek az Object objektumból (Integer, Float, ...).
A Java lehetővé teszi kliens-szerver alkalmazások fejlesztését . A kliens oldalon az appletek jelentik a nyelv ismertségének eredetét. Különösen a kiszolgálói oldalon helyezte el magát a Java az üzleti világban a szervleteknek , az kisalkalmazások szerveroldalának és a közelmúltban a JSP-nek ( JavaServer Pages ) köszönhetően, amelyek helyettesíthetik a PHP , ASP és ASP.NET-t .
A Java operációs rendszert ( JavaOS ), fejlesztői környezeteket ( eclipse / JDK ), virtuális gépeket ( MSJVM (en) , JRE ) cross-platform alkalmazás ( JVM ), mobileszközök / beágyazott ( J2ME ) variációt , grafikus képet adott életre. interfész tervkönyvtár ( AWT / Swing ), nehéz alkalmazások (Jude, Oracle SQL munkalap stb.), web technológiák (kiszolgálóalkalmazások, kisalkalmazások) és egy variáció a vállalat számára ( J2EE ). A Java bytecode hordozhatóságát a Java virtuális gép, és esetleg a JRE-ben található szabványos könyvtárak biztosítják. Ez a virtuális gép képes értelmezni a bájtkódot vagy menet közben lefordítani a gép nyelvére. A hordozhatóság az egyes operációs rendszerek JVM-jeinek hordozhatóságától függ.
A Java nyelv egy Sun Microsystems 1990-ből származó projektből származik: Patrick Naughton mérnök nem volt elégedett a Sun által használt C ++ nyelvvel, annak C nyelvű programozási felületeivel , valamint a kapcsolódó eszközökkel. Miközben fontolóra vette a NeXT-re való átállást, felajánlották neki, hogy dolgozzon egy új technológián, és így született meg a Project Stealth ( lopakodás ).
A lopakodó projektet hamarosan zöld projektnek nevezték el James Gosling és Mike Sheridan érkezésével. Együtt, más mérnökök segítségével , a kaliforniai Menlo Parkban , a Sand Hill Street egyik irodájában kezdtek dolgozni . Megpróbáltak technológiát kifejleszteni a következő generációs alkalmazások fejlesztésére, egyedülálló lehetőségek lehetőségét kínálva a Sun számára.
A csapat eredetileg a C ++ nyelv használatát tervezte, de különböző okok miatt elhagyták. Először is beágyazott rendszeren fejlesztettek, korlátozott erőforrásokkal, és úgy vélték, hogy a C ++ használata túl sok beruházást igényel, és hogy ez a bonyolultság hibaforrást jelent a fejlesztők számára. A szemétgyűjtés hiánya azt jelentette, hogy a memóriakezelést kézzel kellett programozni, ami kihívás, de hibaforrás is volt.
A csapat szintén elégedetlen volt a C ++ nyelv hiányosságaival a biztonság, az elosztott programozás és a több szálon keresztül . Ezen felül olyan platformot akartak, amely bármilyen típusú eszközre vagy platformra portolható.
Bill Joy egy új nyelvet képzelt el, amely a Mesa (in) és a C nyelv legjobb programozási nyelvét ötvözi . A További ( tovább ) című cikkében azt javasolta a Sunnak, hogy mérnökei C ++ alapú objektum-orientált környezetet dolgozzanak ki. Eredetileg Gosling a C ++ nyelv módosítását és fejlesztését tervezte, amelyet C ++ ++ -nak nevezett el, de az ötletet hamar elvetették egy új programozási nyelv kifejlesztése mellett, amelyet Oak-nak (tölgy) neveztek , a legenda szerint az irodájuk ablaka elé ültetett fához .
A csapat keményen dolgozott és 1992 nyarán bemutathatták a Green operációs rendszert is magában foglaló platformot , az Oak nyelv (1992), könyvtárak és hardver. Első eredményük, amelyet bemutattak 1992. szeptember 3, egy Star7 nevű PDA építése volt , amelynek grafikus felülete van, és egy intelligens ügynök, a Duke nevű, hogy segítse a felhasználót.
Ugyanezen év novemberében a zöld projekt megszűnt, hogy a Sun Microsystems 100% -os tulajdonában lévő FirstPerson, Inc. lett , és a csapat átköltözött a Palo Alto-ba. A FirstPerson csapata nagyon interaktív eszközök építésében volt érdekelt, és amikor a Time Warner pályázatot írt ki egy többfunkciós dekóderre, a FirstPerson megváltoztatta a fókuszát, hogy ilyen platformot kínáljon.
A kábeltelevíziós ipar azonban túl sok lehetőséget kínált a felhasználó számára, és a FirstPerson elveszítette a piacot a Silicon Graphics előtt . Mivel nem tudta érdekelni az audiovizuális iparágat, a vállalatot visszaállították a Sun-ba.
Június - ig 1994. július, három napos agymenés után John Gage, James Gosling, Joy, Naughton, Wayne Rosing és Eric Schmidt mellett a csapat újrafókuszálta a platformot az interneten . Úgy vélték, hogy a Mosaic böngésző megjelenésével az Internet volt a megfelelő hely az interaktív eszközök kifejlesztésére, amelyeket a kábelipar számára elképzeltek. A Naughton prototípusként kifejlesztett egy kis webböngészőt, a WebRunnert, amely később HotJava lesz .
Ugyanebben az évben a nyelvet átnevezték Java-ra, miután kiderült, hogy az Oak nevet már használta egy videokártya-gyártó.
A Java név eredeteA "Java" név nem rövidítés , az ötletelés során választották az eredeti "Oak" név helyettesítésére , egy meglévő márkával való ütközés miatt, mert a kávé ( amerikai szlengben "java" ) sok programozó kedvenc italja . A Sun által választott logó szintén gőzölgő csésze kávé.
Java nyilvános indításBan ben 1994. október, A HotJava és a Java platform került bemutatásra a Sun vezetőinek . A Java 1.0a 1994-ben letölthető volt, de megérkezett a HotJava böngésző első nyilvános verziója 1995. május 23a SunWorld konferencián .
A bejelentést John Gage, a Sun Microsystems tudományos igazgatója tette meg. Bejelentését Marc Andressen, a Netscape ügyvezető alelnökének meglepetésszerű bejelentése kísérte, miszerint a Netscape beépíti a Java támogatást a böngészőibe. A 1996. január 9, a Javasoft csoportot a Sun Microsystems hozta létre ennek a technológiának a fejlesztése érdekében. Két hét múlva már elérhető volt a Java első verziója.
A nyelv 1.2 verziójának megjelenése jelentős fordulópontot jelent: 2000-ben jelent meg egyszerre két Java platformon a verzió:
Ezután a Sun Java 2 platformnak minősíti őket, szemben az első generációk 1.0-val és 1.1-vel. Minden további verzió, a J2EE 1.2-től a Java SE vagy a Java EE 7-ig továbbra is Java 2 platformként szerepel, bár a '2' azóta hivatalosan megszűnt.
Kisalkalmazások
Történelmileg a webböngészők Java appletek indításának képessége volt az egyetlen megoldás a gazdag kliens alkalmazások megjelenítésére (RIA a gazdag internetes alkalmazásokhoz ). Ezután versengő technológiák jelentek meg, köztük a Macromedia Flash , a DHTML JavaScript , az XAML vagy az Xul alapú Silverlight .
A kisalkalmazások az ügyfél munkaállomáson tud kommunikálni servletekkel a szerver, mint ahogy Javascript képes kommunikálni a szerver segítségével AJAX . A Flex a Flash technológiát használja az Adobe Flash Player segítségével .
Egy olyan korszakban, amikor a JavaScript a böngészők közötti kompatibilitási problémák miatt szenvedett, a Java kisalkalmazások előnye volt a hordozhatóság, mert a komplex interfészek hordozása a piac összes böngészője számára nehéz volt.
A Java "divat" kiesése mellett a Java-val versenyző technológiákban elért haladás arra késztette a legtöbb fejlesztőt, hogy elforduljon a Java kisalkalmazásoktól és az e technológiában rejlő problémáktól (inkompatibilitások a JVM-ek között, gyenge teljesítmény, gyenge könyvtárak. Grafika, összetettség ). Végül a modern böngészők nagy mérete miatt már nem tartalmazzák szisztematikusan a Java környezetet, és az appletek megjelenítésére képes gépek aránya 2010-ben csak 70% volt, ami jóval alacsonyabb, mint például a Flash esetében. 2010-ben szinte minden gazdag kliens alkalmazás alternatív technológiákat alkalmazott; Flash többnyire, de a GWT is .
Végül a sok RIA és multimédiás funkció beágyazására szánt HTML5 érkezése szintén elavulttá teszi az appleteket.
JavaFX
A Java 8 megjelenésével 2014. március, A JavaFX lesz a hivatalos Java GUI eszköztár-készítő eszköz mindenféle alkalmazáshoz (mobilalkalmazások, asztali alkalmazások, webalkalmazások stb.), Elődje Swing fejlesztésének leállításával (a hibajavítások kivételével). A JavaFX egy tiszta Java API (az a speciális szkriptnyelv, amelyet egy ideig társítottak hozzá, most elhagyott). A JavaFX sokféle eszközt tartalmaz, beleértve az audio és video adathordozókat, a 2D és 3D grafikákat, a webes programozást, a párhuzamos programozást és még sok mást.
Szerver oldalAz alkalmazáskiszolgálókkal az EJB- ket használják a korábban meghatározott osztályok beágyazására. Ezeket az elemeket a J2EE architektúrákban használják többrétegű alkalmazásokhoz. Ennek a munkának az az előnye, hogy el tudjuk rejteni a kód szerver oldali megvalósítását az ügyfél elől.
Munkaállomás használataA Java-nyelv natív használata munkaállomásokon való alkalmazásához mindeddig viszonylag ritkán fordult elő a sebesség hiánya miatt. A számítógépek teljesítményének gyors növekedésével, a 2000-es évekbeli javulásokkal a Java virtuális gépben és a fordítók minőségében azonban számos technológia nyert teret, például a NetBeans és az Eclipse környezet , a megosztott fájlok LimeWire technológiái , Vuze (korábbi Azureus) és I2P . A Java-t a MATLAB matematikai programban , az emberi gép interfész szintjén és a számítógépes algebrában is használják. A swing alkalmazások a .NET technológia alternatívájaként is megjelennek.
Használja mobilokkalAz Oracle bejelenti az indulást2012. októbera JavaOne konferencián azt a vágyát, hogy Java megoldásokat kínáljon a beágyazott szoftverek területén, olyan processzorok számára, amelyek kevésbé hatékonyak, mint általában a PC-ken. Az Oracle az e piaci szegmensekre szakosodott vállalatok egész ökoszisztémáját tömöríti , mint például a MicroEJ kiadó vagy akár az STMicroelectronics, amely a Java-t kínálja STM32-jén, amelynek magja a CortexM3 / M4.
A Java, nevezetesen az Eclipse és a NetBeans révén , már integrált fejlesztői környezetet kínál a mobilhoz. A Java a fő nyelv, amelyet a Google ingyenes operációs rendszerének mobilalkalmazásaihoz fejlesztenek : Android .
A JavaFX lehetővé teszi a Java mobilok használatát is, bár ez nem az elsődleges célja.
Windows OS, Mac OS X és GNU / LinuxA Microsoft 2001-ben a Windows XP megjelenése előtt egy Java típusú, J ++ nevű munkakörnyezetet biztosított operációs rendszereivel . Bírósági határozat nyomán , és tekintettel a nyelv specifikációinak be nem tartására, a Microsoftnak el kellett hagynia ezt a nyelvet, és létre kellett hoznia egy új nyelvet, C # néven (lásd alacsonyabban a „ Függetlenség a platformmal szemben ” fejezetet )
Számos számítógépgyártó továbbra is beépíti a JRE környezetet a Windows rendszerébe.
A Java szintén szabványként jelenik meg a Mac OS X-ben az Apple-től , valamint a Linux disztribúcióknál . Tehát manapság a felhasználók többsége problémamentesen elindíthatja a Java alkalmazásokat. Az Apple számítógépeken azonban a Java 5 Java 6-ra történő terjesztését közvetlenül az Apple, és nem az Oracle kezelte. Ez az irányelv késéseket és verziókorlátozásokat eredményezett:
Így a J2SE 1.4 nem volt elérhető a Mac OS X v10.2 (kódneve Jaguar ), a J2SE 5.0 a Mac OS X v10.4 ( Tiger ), a Java SE 6 előtt csak a Mac OS X v10.5 ( Leopard ) alatt működik, Az Intel processzorhoz és a Java 7-hez Mac OS X számítógépre van szükség, amelyen Mac OS X 10.7 .3 ( Oroszlán ) fut .Nyílt forráskódú licencelésA 2006. november 11, a javac fordító és a HotSpot virtuális gép forráskódja nyílt forráskódként került kiadásra a GNU General Public License alatt .
A 2006. november 13, A Sun Microsystems bejelenti a Java, vagyis a JDK (JRE és fejlesztőeszközök), valamint a Java EE (már licenc alatt CDDL) és a Java ME átmenetét a GPL licenc alatt .2007. március, az OpenJDK projekt néven .
Ban ben 2007. május, A Sun ingyenes licenc alatt adja ki az OpenJDK-t. Az OpenJDK azonban továbbra is a nem szabad kód töredékeitől függ, amelyeket a Sun nem birtokol. Ezért indítja be a Redhat cég 2007. júniusaz IcedTea (in) projekt, amelynek célja a nem szabad kód töredékeinek cseréje, és ezáltal az OpenJDK felhasználhatóvá tétele saját szoftver nélkül. Ban ben 2008. június, az IcedTea projekt szigorú Java kompatibilitási tesztet (TCK) teljesített. Az IcedTea tehát a Java specifikációk nyílt forráskódú megvalósítása. A Sun, majd az Oracle azonban megőrzi a technológia irányítását a Java-ra vonatkozó szabadalmak katalógusán keresztül, valamint a TCK tulajdonosi licenc alatt történő fenntartásával.
Beszerzés az Oracle-tőlAz Oracle vállalat 2009-ben vásárolta meg a Sun Microsystems vállalatot . Most láthatjuk, hogy az Oracle logó megjelenik a Java API dokumentációjában.
A 2010. április 12, James Gosling , a Java programozási nyelv megalkotója olyan okok miatt mond le az Oracle-ről, amelyeket nem kíván nyilvánosságra hozni. Ő lett az Oracle ügyfélszoftver részlegének CTO-ja.
2018-ban az Oracle bejelentette, hogy a professzionális használatra szánt Java SE 8 verziójának frissítéseihez fizetett licenc szükséges2019 január.
A Java nyelv a JDK 1.0 ( Java Development Kit ) óta számos fejlesztésen ment keresztül , számos osztály és csomag hozzáadásával a standard könyvtárhoz. A J2SE1.4 óta a Java fejlődését a JCP ( Java Community Process ) vezeti, amely a JSR ( Java Specifications Requests ) segítségével javasolja a Java platform kiegészítéseit és változtatásait. Magát a nyelvet a Java nyelvspecifikáció (JLS ) határozza meg, a JLS változásait JSR kód alatt 901 kezeli.
Meg kell jegyezni, hogy a nyelv egymást követő fejlődése aligha kapcsolódik a szintaxisához - a kezdetektől fogva viszonylag stabil -, hanem főként funkcióinak gazdagodásához, a szoftverkönyvtárak ( API ) beindításához és optimalizálásához nagyon különböző területeken. : adatbázisok, XML kezelés, elosztott és webes számítástechnika, multimédia, biztonság stb.
VerziószámozásMeg kell különböztetnünk a Java nyelv verzióját a platformoktól és a JRE-től:
Néha két verzió is kínálható egyszerre, például a 8u65 és a 8u66: a különbség általában kisebb hibajavításokból áll (különösebb biztonsági hatás nélkül), amelyeknél a frissítés a legújabb verzióra nem kritikus, és ezért az adminisztrátorok választása marad (JRE) vagy fejlesztők (JDK).
A Java nyilvános verzióit követhetik nem nyilvános, Advanced névre keresztelt verziók, amelyeket kereskedelmi célokra tartanak fenn; így a Java 1.6u45 a Java6 utolsó nyilvános verziója, de a 6u113 az utolsó elérhető verzió2016. március.
Változat | Utolsó verzió | Név JSE / JRE | Kód név | Leírás | JDK | Állapot 2018. október | Karbantartási időszak | Kiterjesztett támogatás |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | Tölgy | JSR 52 | JDK 1.0.2 | Már nem támogatott aktívan | 1996-2000 | |
1.1 | 8_16 | Java 1.1 | JSR 52 | 1.1.8_16 | Már nem támogatott aktívan | 1997-2000 | ||
1.2 | 2_017 | J2SE 1.2 | Játszótér | JSR 52 | 1.2.2_11 | Már nem támogatott aktívan | 2000-2006 | |
1.3 | 1_29 | J2SE 1.3 | Vörös vércse | JSR 58 | 1.3.1_29 | Elavult | 2000-2001 | |
1.4 | 2_30 | J2SE 1.4 | Kis sólyom | JSR 59 | 1.4.2_30 | Elavult | 2000-2008 | |
1.5 | 0_22 - 0_85 | J2SE 5.0 | Tigris | JSR 176 | 1.5.0_22 | Elavult, az 5u51 - 5u85 csak meghatározott Oracle támogatással érhető el | 2002-2009 | 2015. május |
1.6 | 0_45 - 0_111 | Java SE 6 | Musztáng | JSR 270 | 6u113 | Elavult, a 6u51-től a 6u111-ig csak meghatározott Oracle támogatással érhető el | 2005-2013 | 2018. december |
1.7 | 0_79 - 0_80 | Java SE 7 | Delfin | JSR 336 | 1.7.0_79 | Stabil, 1.7.0_79 verzió | 2011–2015 | 2022 július |
1.8 | 0_171 | Java SE 8 | Kenai majd Pók | JSR 337 | 1.8.0_171 | Stabil, az 1.8.0_171 verzió felajánlva a felhasználóknak | 2014-szeptember2018 | 2019 július |
9. | 9.0.4 | Java SE 9 | Esernyő | JSR 379 | 9.0.4 | Stabil | 2018-? | |
10. | 10.0.1 | Java SE 10 | JSR 383 | 10.0.1 | 6 hónappal a JDK Java11-LTS következő kiadása előtt támogatott | 2018, nem LTS verzió (hosszú távú támogatás) | ||
11. | 11.0.1 | Java SE 11 | JSR 384 | 11.0.1 | LTS verzió | 2023 | 2026 | |
12. | 12.0.2 | Java SE 12 | JSR 386 | 12.0.2 | ||||
13. | Java SE 13 | JSR 388 | 13.0 | |||||
14 | Java SE 14 | JSR 389 | 14.0.1 |
Itt csak az egyes kiadások legfrissebb verziószámait soroljuk fel. Az egymást követő módosítások verziónként és frissítésenként a wikipedia.en / java_history oldalon találhatók .
Tartalom és fejlemények A JDK 1.0-tól a J2SE 1.4-igKiadva 2004. szeptember 30(3270 osztály és interfész), kódneve Tigris . Eleinte 1,5-ös számozású, amelyet mindig belső verziószámként használnak. Által kidolgozott (in) JSR 176 , Tiger hozzá egy jelentős számú új funkciók a nyelvet:
Ez a példa végigjárja az Iterable osztály kütyü objektumának tartalmát, és csak hivatkozásokat tartalmaz a Widget osztály objektumaira, mindegyik elemet hozzárendelve a w változóhoz, majd meghívja a display () metódust a w elemen (amelyet a JSR ad meg) 201). Hasonló szintaxist vezetnek be 2011-ben a C ++ 11-ben .
A nyelvváltások mellett az évek során jelentősebb változások történtek, amelyek a JDK 1.0 néhány száz osztályától a J2SE 5.0 több mint 3000 osztályán át vezettek. Teljes API-k kerültek hozzá, például a Swing vagy a Java2D, és az eredeti JDK 1.0-ból sok metódust elavultnak nyilvánítottak (azaz elavulttá váltak, a Java későbbi verziójában eltávolíthatók).
Java SE 6Kiadva 2006. december 11(3777 osztály és interfész több mint 20 csomagban), kódneve Mustang . A béta verzió megjelent2006. február 15, egy másik béta 2006. június, egy „ kiadási jelölt ” verzió2006. november, és a végleges verzió 2006. december 12. Ezzel a kiadással a Sun véglegesen megváltoztatja a J2SE nevet Java SE-re, és eltávolítja a .0-t a verziószámból.
Ezt a verziót számos biztonsági rés és javító frissítés érte, ami az Oracle 1.6.0_45, Mac OS verziójához pedig 1.6.0_51 verziójához vezetett. Ez egyben a Java utolsó verziója, amely Mac OS X 10.6 és korábbi verziókra fut.
Java SE 7Kiadva 2011. július 7(8000 osztály és interfész), kódneve Dolphin . Ez az első verzió a GNU GPL licenc alatt .
A 6. frissítéstől (7u6) kezdve a Java Oracle standard kiadása ismét teljes mértékben támogatja a Mac OS X-et, ennek az operációs rendszernek a frissítéseit már nem az Apple, hanem az Oracle támogatja. A Java ezen verzióját azonban a Mac OS X v10.6 nem támogatja : Valójában a Java 7 által igényelt egyes API-kat az Apple beépítette a Mac OS X 10.7.3-ba, de nem várható, hogy ezeket a Mac operációs rendszer. A 7u90 verziója2015. április a Java 7 utolsó nyilvánosan elérhető frissítése.
A Java 7 többek között a következő új szolgáltatásokat kínálja:
Kenai kódnév. A JDK fejlesztés alatt álló különféle kiadásai 2013 őszétől letölthetők, a Java 8 pedig2014. március-tól az Oracle által bemutatott ütemtervnek megfelelően2013 május.
Ennek a verziónak az egyik legfontosabb újdonsága a lambdas hozzáadása , ami az API egy részének, különösen a gyűjtemények és a stream fogalmának újratervezéséhez vezet . Egyéb figyelemre méltó kiegészítések közé tartoznak az opciók, az alapértelmezett megvalósítások az interfészen belül, a dátum API újratervezése és egyebek. Másrészt az Enterprise Edition verzió (Java 8 EE) várhatóan 2017 előtt nem várható.
Az eredetileg erre a verzióra tervezett JVM és a Jigsaw projekt modulozását a 9. verzióra halasztják, különös tekintettel a Java 6 által tapasztalt biztonsági résekre, amelyeket az Oracle 2013-ban inkább kijavított a Java evolúcióival szemben.
Java SE 9Az eredetileg 2015-re tervezett, de részben a Jigsaw projekt miatt elhalasztott verziót végül kiadták 2017. szeptember 21.
A Java 9 integrálja:
Ez a verzió megjelent 2018. március 20.
Ez az új verzió különösen a következőket tartalmazza:
Ez a verzió megjelent 2018. szeptember 25.
A hosszú távú verziótámogatási modell változásán túl ez a verzió különösen a következőket tartalmazza:
Ez a verzió megjelent 2019. március 19.
Ez a verzió 8 változatot integrál:
Ez a verzió megjelent 2019. szeptember 17.
Ez a verzió 2020. március 17-én jelent meg
Ez a verzió 2020. szeptember 15-én jelent meg.
Java SE 16Ez a verzió 2021. március 16-án jelent meg.
A Java nyelv létrehozásakor úgy döntöttek, hogy ennek a nyelvnek öt célt kell teljesítenie:
Az első jellemző, az objektumorientált ("OO") és a köznyelvi karakter a nyelv programozásának és tervezésének módszerére utal, valamint arra, hogy a Java-ban írt program meglehetősen hasonló a C ++ nyelven írt programhoz .
Annak ellenére, hogy az objektumorientált kifejezés többféle értelmezést tartalmaz, az ilyen típusú fejlesztésekben kulcsfontosságú gondolat az, hogy a különféle adattípusokat közvetlenül kell összekapcsolni az adott adaton végrehajtható különböző műveletekkel. Ennek eredményeként az adatokat (az úgynevezett Tulajdonságok ) és az azokat manipuláló kódot (az úgynevezett Metódusokat ) egyetlen entitásnak nevezzük, objektum osztálynak . A kód logikailag apró koherens entitásokra oszlik, és így karbantartása egyszerűbb, könnyebben újrafelhasználható, eleve moduláris.
Más mechanizmusok, például az öröklődés lehetővé teszik egy osztály saját jellemzőinek a saját programjaiban korábban leírt jellemzőinek kiaknázását anélkül, hogy meg kellene ismernünk a belső működését - csak az interfészt látjuk (a leírt felület. Tulajdonságok és módszerek a társított kód megadása nélkül). . A Java tiltja az öröklés fogalmát több szülőosztálytól, kivéve, ha ezek interfészek.
A nyelv 1.5-ös verziójához hozzáadták a generikusokat , a C ++ nyelv sablonjaihoz vagy az OCaml funkcióihoz hasonló (de ettől eltérő) polimorfizmus- mechanizmust . A generikumok lehetővé teszik az egyszerűbb és biztonságosabb (a gépelés szempontjából) kifejezést az olyan objektumok tulajdonságairól, mint a konténerek (listák, fák stb.): A listatípust ezután a d típushoz képest általánosnak tekintik. objektum szerepel a listában.
Ez az elem hozzájárul a programok robusztusságához és teljesítményéhez, a Garbage Collector rendszeresen és automatikusan hívásra kerül a program végrehajtása során. A többprocesszoros és / vagy többmagos rendszereket , ez még foglalkoztat több alacsony prioritású szálak , hogy megzavarják a program végrehajtását a lehető legkevesebbet. Ezenkívül a programozó javasolhatja a szemétgyűjtő futtatását a System.gc () módszerrel, ha szükséges .
A C ++ nyelvekhez hasonló visszatérő panasz nehéz feladat, hogy manuálisan kell programoznia a memóriakezelést. A C ++ - ban a program által az objektum létrehozására lefoglalt memória elosztása megtörténik, amikor megsemmisül (például a törlési operátor kifejezett meghívásával ). Ha a programozó elfelejti kódolni az üzletkötést, ez " memóriaszivárgást " eredményez, és a program egyre többet fogyaszt. Még rosszabb, ha egy program tévesen többször kéri az elosztást, vagy memóriaterületet használ, miután megkérte az elosztását, akkor az valószínűleg instabillá válik és végzetes hibát okoz.
A Java-ban ezeknek a problémáknak a sokát elkerüli a szemétszállítás . Az egyes létrehozott objektumokhoz szükséges memóriaterületet egy erre a célra fenntartott memóriakupacban ( angolul : memory heap ) kezeljük . A program az egyes objektumokat a halomban található hivatkozáson keresztül éri el. Ha már nincs utalás egy objektum elérésére, a szemétgyűjtő automatikusan megsemmisíti - mivel elérhetetlenné vált - felszabadítja a memóriát, és ezzel megakadályozza a memória szivárgását.
A szemétgyűjtő egy címkézési és kiadási algoritmust ( angolul : mark and sweep ) használ az egymásra hivatkozó objektumok összetett eseteinek kezelésére vagy a hurkok hivatkozására (a lista kettős láncolásához ). A gyakorlatban még mindig vannak olyan programozási hibák, amikor a szemétgyűjtő úgy ítéli meg, hogy egy objektum még mindig hasznos, miközben a program már nem funkcionálisan fér hozzá (de hivatkozást tart az objektumra), ami a " memóriaszivárgás " sajátos esetét képezi .
A szemétszállítás jelentősen megkönnyíti és biztonságosabbá teszi a memóriakezelést. A programok vagy a könyvtárak tervezőinek és felhasználóinak nem kell aggódniuk az objektumok elosztása miatt ( a C ++ operátor törlése ), kivéve esetleg teljesítményi okokból.
A platformfüggetlenség azt jelenti, hogy a Java-ban írt programok nagyon hasonlóan teljesítenek a különböző hardverarchitektúrákon. A Sun Java-licenc tehát ragaszkodik ahhoz, hogy minden megvalósításnak kompatibilisnek kell lennie. Elméletileg így elvégezhetünk egy adott architektúra fejlesztését, és a többi alkalmazást futtathatjuk.
Ezt az eredményt a következő módon kapjuk:
Vegye figyelembe, hogy még akkor is, ha kifejezetten létezik a fordítás első fázisa, a Java bájtkódot menet közben akár egy fordító is értelmezi, vagy konvertálja natív kódgá ( éppen időben , JIT).
Összeállítások típusaiA nyelv korai megvalósítása értelmezett virtuális gépet használt a hordozhatóság eléréséhez. Ezek a megvalósítások olyan programokat hoztak létre, amelyek lassabban futtattak, mint az összeállított nyelven (C, C ++ stb.) Írtak, így a nyelv gyenge teljesítményének hírnevében szenvedett.
A Java Virtual Machine (JVM) újabb megvalósításai a korábbiaknál sokkal gyorsabban készítik a programokat, különböző technikák alkalmazásával:
Miután a Sun megállapította, hogy a Microsoft implementációja nem támogatja az RMI és a JNI interfészeket , és az eredeti platformjához képest platformspecifikus elemekkel rendelkezik, a Sun pert indított a Microsoft ellen, és kártérítést kapott (20 millió dollár). Ez az igazságszolgáltatás tovább szigorította a Sun engedélyének feltételeit. Válaszul a Microsoft megszüntette a Java támogatását a platformjain, és a Windows legújabb verzióiban az Internet Explorer nem támogatja a Java kisalkalmazásokat plug-inek hozzáadása nélkül. A Sun azonban ingyen elérhetővé teszi a Java futási környezetet a különböző Microsoft platformok számára.
A hordozhatóság technikailag megfoghatatlan cél, és a Java sikere ezen a területen vegyes. Noha valóban lehet olyan programokat írni a Java platformhoz, amelyek sok célgépen jól működnek, az apró hibákkal és inkonzisztenciákkal rendelkező platformok nagy száma a Sun " Írj egyszer, futtasd bárhova " ( "Írj egyszer, fuss bárhova " ), hogy " egyszer írj, mindenhol hibakereső " ( " Egyszer írj, mindenhol hibakereső " )!
A Java platformfüggetlensége azonban sikeres a szerveroldali alkalmazásokkal, például a webszolgáltatásokkal, a servletekkel és a Java Beans-szal, valamint az OSGi beágyazott rendszereivel, az Embedded Java környezet használatával .
A Java platform volt az első rendszerek egyike, amely támogatást nyújtott a távoli forrásokból származó kód végrehajtásához. Egy kisalkalmazás futtatható a felhasználó webböngészőjében , végrehajtva a HTTP szerverről letöltött kódot . Egy kisalkalmazás kódja nagyon korlátozott helyen működik, amely megvédi a felhasználót a helytelen vagy rosszindulatú kódoktól. Ezt a helyet egy biztonsági kezelő nevű objektum határolja . Ilyen objektum létezik a helyi kódhoz is, de alapértelmezés szerint inaktív.
A biztonsági kezelő (a SecurityManager osztály ) lehetővé teszi bizonyos számú engedély megadását a helyi rendszer erőforrásainak (fájlrendszer, hálózat, rendszer tulajdonságai stb.) Használatához. Az engedély meghatározza:
Az applet szerkesztők kérhetnek tanúsítványt, amely lehetővé teszi számukra, hogy digitálisan aláírják egy kisalkalmazást biztonságosként, és engedélyt adhatnak számukra (megfelelő jogosultsággal), hogy kilépjenek a korlátozó helyből és hozzáférjenek a helyi rendszer erőforrásaihoz.
Itt van egy példa egy tipikus Java-ra írt Hello world programra :
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }A forrásfájl szinte mindig az ".java" kiterjesztésű osztály nevét viseli (itt a "HelloWorld.java", még kötelező is lenne, mert az osztály deklarációjában szerepel a nyilvános attribútum - akkor mindenki számára elérhetővé tegye azt) ). Összeállíthatjuk és futtathatjuk ezt a példát a terminálon a következő parancsokkal ( Linux alatt ):
javac HelloWorld.java export CLASSPATH=. java HelloWorldAz „ export CLASSPATH =. Arra szolgál, hogy elmondja a Java-nak, hogy osztályprogramokat is meg kell keresnie az aktuális könyvtárban. Ez az út is megadható a program indításakor a -classpath opció (vagy -CP rövid):
java -cp. HelloWorldMegjegyzések:
( forrás )
Az osztály az attribútumoknak nevezett adatok és a metódusoknak nevezett műveletek leírása. Ez egy definíciós sablon ugyanazon attribútumkészlettel és ugyanazokkal a műveletekkel rendelkező objektumokhoz. Egy osztályból létrehozhatunk egy vagy több objektumot példányosítással; minden objektum egyetlen osztály példánya .
Láthatóság:
Az attribútumot úgy definiáljuk, hogy megadjuk a típusát, majd a nevét és esetleg egy inicializáló részt.
Láthatóság:
A módszert a következők határozzák meg:
Láthatóság:
Vezetéknév | Méret bájtokban a számítások során | Alapértelmezett érték | Lehetséges értékek |
---|---|---|---|
logikai | Egyetlen bit elég, de ezek tárolásához gyakran fenntartunk egy bájtot. | false | true, false |
byte | 1 | 0 | -128 és +127 közötti egész számok (-2 7 és 2 7 -1) |
rövidnadrág | 2 | 0 | −32 768 és 32 767 közötti egész számok (-2 15 és 2 15 -1) |
int | 4 | 0 | −2 147 483 648 és +2 147 483 647 (-2 31 és 2 31 -1) közötti egész számok |
hosszú | 8. | 0 | −9 223 372 036 854 775 808 és 9 223 372 036 854 775 807 közötti egész számok (-2 63 és 2 63 -1) |
tartály | 2 | '\u0000' | Minden érték Unicode (U értékek + U + 0000 FFFF, 4 számjegy után szükséges '\u') Az első 128 karakter ASCII kódok és tudomásul aposztróf: 'a', '1', '\'', '\n'. |
úszó | 4 | 0.0 | Számkészlet [−3.402 823 47 × 10 38 .. −1.402 398 46 × 10 −45 ], 0, [1.402 398 46 × 10 −45 .. 3.402 823 47 × 10 38 ] |
kettős | 8. | 0.0 | Számkészlet [−1 797 693 134 862 315 70 × 10 308 .. −4 940 656 458 412 465 44 × 10 −324 ], 0, [4 940 656 458 412 465 44 × 10 −324 .. 1797 693 134 862 315 70 × 10,308 ] |
Tárgy | Virtuális gépfüggő | null |
A fenti táblázat felsorolja az alaptípusokat, azonban vannak más típusok is a Java-ban, amelyek objektumok, és mint ilyenek használhatók. Például egy egész szám meghatározásához használhatjuk az 'Integer' típust, amelynek inicializálási értéke alapértelmezés szerint lesznull
Egy változó példányosításához a szintaxis (itt ugyanaz, mint a C-ben) a következő:
NomDuType maVariable;A myVariable- t kiosztják a veremben.
Gyakran sok adatot kell tárolni gyűjteményekben: bevásárlólista, tanulói jegyzetek stb. A gyűjtemények megtekinthetők, módosíthatók, válogathatjuk, újrafeldolgozhatjuk, törölhetjük stb. Ezek lehet fix vagy változó méretűek.
A rögzített méretű gyűjtemények könnyebbek, mint a változó méretű gyűjtemények.
Fix méretű gyűjteményekAz absztrakt osztály AbstractListváltozó méretű gyűjtemények megvalósítására szolgál.
Az ArrayList inicializálásához importálnia kell az osztályt, java.util.ArrayListés írnia kell liste = new ArrayList<T>();vagy liste = new ArrayList<>(); a JDK 7.0-ból.
A JDK 1.5 óta lehetőségünk van megadni az ArrayList elemei típusát: egész számok, karakterláncok vagy más objektumok.
Egy elem hozzáadásához írunk liste.add(Objet);
Az ArrayList elemének elérése: liste.get(index);
A listában szereplő elemek számának megismerése: liste.size();
Elem törlése: liste.remove(index);a törölt elemet követő elemek balra tolódnak.
Bár mindegyiküknek hasonló a szerepe, mindegyik hurok mégis alkalmazkodik egy helyzethez:
Megjegyzés : a feltételeket (logikai kifejezések) kombinálni lehet további operátorokkal: a logikai "AND" && (utasítás végrehajtva, ha minden feltétel teljesül):
Van még logikus „OR” || (utasítás végrehajtása, ha a feltételek legalább egyike teljesül):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }Végül itt van a logikus „NEM” ! amely lehetővé teszi egy feltétel eredményének megfordítását.
Ezeket a műveleteket kombinálni lehet komplex feltételes struktúrák megszerzéséhez. Zárójeleket adhat a feltételek prioritásainak meghatározásához (mint egy számításban). Más esetekben a JVM elvégzi a különféle ellenőrzéseket balról jobbra.
Az utasítások végrehajtásának megválasztását a kapcsolót követő kifejezés határozza meg, amelynek típusa lehet egész szám ( int , char , byte vagy rövid vagy a megfelelő borítékosztály), felsorolt ( enum ) vagy String (karakterlánc, csak a Java 7 esetén).
Megjegyzés: „ A feltételes operátor vagy a hármas operátor ? : a feltételes utasítás használatának elkerülésére használható. A feltételes kifejezés a logikai feltétel tesztelése után bármelyik értékkel bír:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Feltétel nélküli kapcsolatokA végső kódblokk az eredménytől függetlenül végrehajtásra kerül, amikor a program kilép a try-catch blokkból .
Íme egy példa a kivétel elkapására:
FileOutputStream fos = null; try { //Chacune de ces deux instructions peut générer une exception // création d'un flux pour écrire dans un fichier fos = new FileOutputStream(...); // écriture de données dans ce flux fos.write(...); } catch (IOException e) { //Gestion de l'erreur de création ou d'écriture dans le flux e.printStackTrace(); } finally{ //Cette section de code est toujours exécutée, qu’il y ait une exception ou pas // fermeture du flux s'il a été ouvert if(fos != null) fos.close(); }Ez a példa a Java-ban a kivételek mechanizmusát szemlélteti. A try blokk bemeneti / kimeneti hibája esetén a végrehajtás a helyzetnek megfelelő fogási blokkban folytatódik (kivéve az IOException típust ).
Ebben a fogási blokkban az e változó a bekövetkezett kivételre hivatkozik. Itt a printStackTrace () metódust hívjuk meg, amely a konzolban megjeleníti a bekövetkezett kivétel adatait: név, ok, a hívásverem állapota a kivétel dobásakor, és opcionálisan annak a sornak a száma, ahol a hiba bekövetkezett.
Az utolsó blokkot ezután végrehajtják (itt a felhasznált erőforrások bezárásához). Ez csak egy példa: a kivétel végrehajtása esetén végrehajtandó műveletek az alkalmazás általános működésétől és a kivétel jellegétől függenek.
Általános típusokEgy általános típust egyébként sablonnak hívnak, egy vagy több más típust vesz fel argumentumként. A paraméterként átadott típust a példányosítás során határozzuk meg.
Ez különösen az ArrayLists összefüggésében teszi lehetővé a leadások elkerülését.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Ezeket az általános típusokat csak fordítási időben használják, közvetlenül nem bájtkódban.
Különbség a C ++ -val: A C ++ sablonjai minden típust osztályoznak. A Java viszont a fordítás idején úgy viselkedik, mintha mi megismételtük volna ezeknek a belső típusoknak az osztályait, de valójában csak egy osztállyal foglalkozunk.
Forráskód kódolásA Java nyelv specifikációi megadják, hogy azt UTF-16 formátumú karakterek alkotják , ami lehetővé teszi a világ összes karakterének használatát a forráskódban:
public class HelloWorld { private String text = "hello world"; }A platformok közötti hordozhatóság biztosítása érdekében az osztályneveknek azonban csak ASCII karakterekből kell állniuk .
Operátor | Jelentése |
---|---|
== | Egyenlő (nem tévesztendő össze azzal, ami = a hozzárendelési operátor) |
! = | Különböző |
< | Alsóbbrendű |
> | kiváló |
<= | Kevesebb vagy egyenlő |
> = | Nagyobb vagy egyenlő |
A JavaStyle a Sun által definiált Java nyelvű programozási konvenció. A szigorú egyezmények betartása biztosítja az egész csapat által kifejlesztett alkalmazás forráskódjának homogenitását, és elősegíti a forráskód terjesztését ugyanazon kódolási konvenciókkal rendelkező közösség számára.
Az alsó teve esetet használjuk a módszerek és változók nevére.
A Sun nagyszámú keretet és API-t kínál , amelyek lehetővé teszik a Java használatát a legkülönbözőbb felhasználási területeken.
Lényegében négy fő keret létezik :
A perzisztencia a szabványokon alapszik:
Számos más technológia, API és opcionális bővítmény létezik azonban a Java számára:
A programozás parancssorból történhet egy Java fordító elindításával (gyakran javac néven ), de a nagyobb kényelem érdekében jobb, ha integrált fejlesztői környezetet vagy IDE- t használunk (amely lehetővé teszi az automatikus fordítást), némelyik ingyenes. Például :
A Java program előállítható olyan eszközökkel, amelyek automatizálják az összeállítási folyamatot (vagyis bizonyos feladatok automatizálását, amelyek potenciálisan nagy számú függőséget jelentenek, például könyvtárak, fordítások, archívumok létrehozása, dokumentáció, telepítés stb.). A leggyakrabban használtak:
Eredmények:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes