Java (programozási nyelv) - Java (programming language)
| Paradigma | Multi-paradigma : általános , objektum-orientált ( osztályalapú ), funkcionális , kötelező , reflektív , párhuzamos |
|---|---|
| Tervezte | James Gosling |
| Fejlesztő | Oracle Corporation |
| Először jelent meg | 1995. május 23 . |
| Stabil kiadás | |
| Gépelési fegyelem | Statikus, erős, biztonságos , névleges , manifeszt |
| Fájlnévkiterjesztések | .java, .class , .jar , .jmod |
| Weboldal | oracle |
| Befolyásolta | |
| CLU , Simula67 , Lisp , Smalltalk , Ada 83 , C ++ , C# , Eiffel , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Object Pascal | |
| Befolyásolt | |
| Ada 2005 , BeanShell , C# , Chapel , Clojure , ECMAScript , Fantom , Gambas , Groovy , Hack , Haxe , J# , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript | |
| |
A Java egy magas szintű , osztályalapú , objektum-orientált programozási nyelv, amelyet úgy terveztek, hogy a lehető legkevesebb megvalósítási függőséggel rendelkezzen . Ez egy általános célú programozási nyelv, amelynek célja, hogy a programozók egyszer írhassanak, bárhol fussanak (WORA), ami azt jelenti, hogy az összeállított Java-kód minden olyan platformon futtatható, amely támogatja a Java-t, anélkül, hogy újra kellene fordítani. A Java -alkalmazásokat általában bájtkódba állítják össze, amelyek bármilyen Java virtuális gépen (JVM) futtathatók, függetlenül a mögöttes számítógép -architektúrától . A Java szintaxisa hasonló a C és a C ++ nyelvhez , de kevesebb alacsony szintű szolgáltatással rendelkezik, mint bármelyik. A Java futtatókörnyezet olyan dinamikus képességeket biztosít (például reflexió és futásidejű kódmódosítás), amelyek általában nem érhetők el a hagyományos fordított nyelveken. 2019-től a Java volt az egyik legnépszerűbb programozási nyelv a GitHub szerint , különösen az ügyfél-szerver webes alkalmazások esetében , 9 millió fejlesztővel.
A Java -t eredetileg James Gosling fejlesztette ki a Sun Microsystemsnél ( amelyet azóta az Oracle vásárolt meg ), és 1995 -ben adták ki, mint a Sun Microsystems Java platformjának alapvető összetevőjét . Az eredeti és referencia implementációs Java fordítókat , virtuális gépeket és osztálykönyvtárakat eredetileg a Sun adta ki saját licenc alatt . 2007 májusától, a Java közösségi folyamat előírásainak megfelelően, a Sun a legtöbb Java-technológiáját a GPL-2.0 licenc alapján újralicencezte . Az Oracle saját HotSpot Java virtuális gépet kínál, azonban a hivatalos referencia megvalósítás az OpenJDK JVM, amely ingyenes nyílt forráskódú szoftver, és amelyet a legtöbb fejlesztő használ, és szinte minden Linux disztribúció alapértelmezett JVM-je.
2021. októberétől a Java 17 a legújabb verzió. A Java 8, 11 és 17 a jelenlegi hosszú távú támogatási (LTS) verziók. Az Oracle 2019 januárjában tette közzé a legutóbbi, nulla költségű nyilvános frissítést a korábbi Java 8 LTS verzióhoz kereskedelmi használatra, bár egyébként továbbra is támogatja a Java 8-at nyilvános frissítésekkel, személyes használatra. Más gyártók zéró költséggel kezdték kínálni az OpenJDK 8 és 11 verzióit, amelyek továbbra is biztonsági és egyéb frissítéseket kapnak.
Az Oracle (és mások) erősen javasolják az elavult és nem támogatott Java verziók eltávolítását, mivel a megoldatlan biztonsági problémák miatti súlyos kockázatok miatt. Az Oracle azt tanácsolja felhasználóinak, hogy haladéktalanul térjenek át egy támogatott verzióra, például az LTS egyik verziójára (8, 11, 17).
Történelem
James Gosling , Mike Sheridan és Patrick Naughton 1991 júniusában kezdeményezte a Java nyelvi projektet. A Java -t eredetileg interaktív televízióhoz tervezték, de akkor még túl fejlett volt a digitális kábeltelevíziós ipar számára. A nyelv eredetileg nevezett Oak után tölgy fa előtt állt Gosling irodájában. Később a projekt Green nevet kapta , és végül Java névre keresztelték , Java kávéból , egy indonéziai kávéfajtából . Gosling tervezte a Java -t egy C / C ++ stílusú szintaxissal, amelyet a rendszer- és alkalmazásprogramozók ismerősnek találnak.
A Sun Microsystems 1996-ban adta ki az első nyilvános implementációt Java 1.0 néven. Megígérte, hogy egyszer ír, fut bárhol (WORA) funkcionalitást biztosít, költségmentes futási időt biztosítva a népszerű platformokon . Meglehetősen biztonságos és konfigurálható biztonsággal lehetővé tette a hálózati és fájlhozzáférési korlátozásokat. A nagy webböngészők hamarosan beépítették a Java appletek futtatásának lehetőségét a weboldalakra, és a Java gyorsan népszerűvé vált. A Java 1.0 fordító újraírta a Java által Arthur van Hoff , hogy szigorúan betartja a Java 1.0 nyelvspecifikáció. A Java 2 megjelenésével (eredetileg J2SE 1.2 néven jelent meg 1998 decemberében - 1999 decemberében) az új verziók többféle konfigurációt hoztak létre különböző típusú platformokhoz. A J2EE magában foglalta a vállalati alkalmazásokhoz használt technológiákat és API -kat, amelyek általában szerverkörnyezetben futnak, míg a J2ME mobil alkalmazásokhoz optimalizált API -kat tartalmazott. Az asztali verziót átnevezték J2SE -re. 2006 -ban a Sun marketing célokra az új J2 verziókat Java EE , Java ME és Java SE névre keresztelte át .
1997 -ben a Sun Microsystems megkereste az ISO/IEC JTC 1 szabványügyi testületet, majd az Ecma International -et, hogy hivatalossá tegye a Java -t , de hamarosan kivonult a folyamatból. A Java továbbra is de facto szabvány , amelyet a Java közösségi folyamat irányít . Valamikor a Sun a Java -implementációk nagy részét ingyenesen elérhetővé tette, annak ellenére, hogy a szoftver saját állapota. A Sun bevételt generált a Java -tól a speciális termékek, például a Java Enterprise System licenceinek értékesítésével.
2006. november 13-án a Sun kiadta Java virtuális gépének (JVM) nagy részét ingyenes és nyílt forráskódú szoftverként (FOSS), csak a GPL-2.0 licenc feltételei szerint. 2007. május 8-án a Sun befejezte a folyamatot, és a JVM összes alapvető kódját elérhetővé tette ingyenes szoftver /nyílt forráskódú terjesztési feltételek mellett, kivéve a kód egy kis részét, amelyhez a Sun nem rendelkezett szerzői joggal.
A Sun alelnöke, Rich Green azt mondta, hogy a Sun ideális szerepe a Java-val kapcsolatban evangélista . Miután az Oracle Corporation 2009–2010 -ben felvásárolta a Sun Microsystems -t, az Oracle a Java technológia irányítójaként jellemezte magát, és könyörtelenül elkötelezett a részvételi közösség és az átláthatóság elősegítése mellett. Ez nem akadályozta meg az Oracle -t abban, hogy röviddel ezután pert indítson a Google ellen a Java Android SDK -n belüli használata miatt (lásd az Android részt).
2010. április 2 -án James Gosling lemondott az Oracle -ről .
2016 januárjában az Oracle bejelentette, hogy a JDK 9 alapú Java futásidejű környezetek megszüntetik a böngészőbővítményt.
A Java szoftver a laptopoktól az adatközpontokig , játékkonzolokon át a tudományos szuperszámítógépekig mindenen fut .
Alapelvek
A Java nyelv létrehozásának öt elsődleges célja volt:
- Egyszerűnek, tárgyközpontúnak és ismerősnek kell lennie .
- Robusztusnak és biztonságosnak kell lennie.
- Architektúra-semlegesnek és hordozhatónak kell lennie.
- Nagy teljesítménygel kell végrehajtani.
- Értelmezni kell , menetes és dinamikus .
Verziók
2021. szeptemberétől a Java 8, 11 és 17 támogatott LTS ( Long-Term Support ) változat. A Java főbb verziói és megjelenési dátumaik:
| Változat | Dátum |
|---|---|
| JDK Béta | 1995 |
| JDK1.0 | 1996. január 23 |
| JDK 1.1 | 1997. február 19 |
| J2SE 1.2 | 1998. december 8 |
| J2SE 1.3 | 2000. május 8 |
| J2SE 1.4 | 2002. február 6 |
| J2SE 5.0 | 2004. szeptember 30 |
| Java SE 6 | 2006. december 11 |
| Java SE 7 | 2011. július 28 |
| Java SE 8 (LTS) | 2014. március 18 |
| Java SE 9 | 2017. szeptember 21 |
| Java SE 10 | 2018. március 20 |
| Java SE 11 (LTS) | 2018. szeptember 25 |
| Java SE 12 | 2019. március 19 |
| Java SE 13 | 2019. szeptember 17 |
| Java SE 14 | 2020. március 17 |
| Java SE 15 | 2020. szeptember 15 |
| Java SE 16 | 2021. március 16 |
| Java SE 17 (LTS) | 2021. szeptember 14 |
| Java SE 18 | 2022 március |
Kiadások
| Java platform kiadások |
|---|
|
A Sun meghatározta és támogatja a Java négy kiadását, amelyek különböző alkalmazáskörnyezeteket céloznak meg, és számos API -t szegmentáltak , hogy azok valamelyik platformhoz tartozhassanak. A platformok a következők:
- Java kártya intelligens kártyákhoz.
- Java Platform, Micro Edition (Java ME) - korlátozott erőforrásokkal rendelkező környezeteket céloz meg.
- Java Platform, Standard Edition (Java SE) - a munkaállomások környezetét célozza meg.
- Java Platform, Enterprise Edition (Java EE) - nagy elosztott vállalati vagy internetes környezeteket céloz meg.
A Java API -k osztályai külön csoportokba szerveződnek, amelyeket csomagoknak neveznek . Minden csomag tartalmaz egy sor kapcsolódó felületet , osztályt, alcsomagot és kivételt .
A Sun kiadta a Personal Java nevű kiadást is, amelyet későbbi, szabvány alapú Java ME konfigurációs-profil párosítások váltottak fel.
Végrehajtási rendszer
Java JVM és bájtkód
A Java egyik tervezési célja a hordozhatóság , ami azt jelenti, hogy a Java platformra írt programoknak hasonló módon kell futniuk a hardver és az operációs rendszer bármilyen kombinációján, megfelelő futási idő támogatással. Ezt úgy érjük el, hogy a Java nyelvi kódot egy Java bájtkódnak nevezett közbenső ábrázolásba fordítjuk , nem pedig közvetlenül az architektúra-specifikus gépi kódba . A Java bytecode utasítások analógok a gépi kóddal, de azokat kifejezetten a gazda hardverhez írt virtuális gép (VM) hajtja végre . A végfelhasználók általában Java Runtime Environment (JRE) rendszert használnak a gépükre önálló Java -alkalmazásokhoz, vagy webböngészőben Java -kisalkalmazásokhoz .
A szabványos könyvtárak általános módot kínálnak a gazdagép-specifikus szolgáltatások elérésére, mint például a grafika, a szálazás és a hálózatépítés .
Az univerzális bájtkód használata egyszerűvé teszi a hordozást. A bájtkód gépi utasításokra való értelmezésének költségei azonban az értelmezett programokat szinte mindig lassabban futtatják, mint a natív végrehajtható fájlok . Korai szakaszban vezették be azokat a just -in-time (JIT) fordítókat, amelyek futás közben bájtkódokat fordítanak a gépi kódba. A Java Hotspot fordítója valójában két fordító egyben; és GraalVM (pl. a Java 11 -ben, de eltávolítva a Java 16 -tól ), lehetővé téve a többszintű fordítást . A Java maga platformfüggetlen, és hozzá van igazítva az adott platformhoz, amelyen egy Java virtuális gép (JVM) fut , amely lefordítja a Java bájtkódot a platform gépi nyelvére.
Teljesítmény
A Java nyelven írt programok hírneve lassabb és több memóriát igényel, mint a C ++ nyelven írt programok . A Java-programok végrehajtási sebessége azonban jelentősen javult, amikor 1997/1998 -ban bevezette a Java 1.1- ben az időben történő fordítást , valamint a jobb kódelemzést támogató nyelvi funkciókat (például belső osztályok, StringBuilder osztály, opcionális állítások stb.). .), és optimalizáció a Java virtuális gép, mint a HotSpot egyre Sun JVM alapértelmezett 2000. évi Java 1.5, a teljesítmény javult azzal a kiegészítéssel, a java.util.concurrent csomag, beleértve lock-mentes megvalósításai ConcurrentMaps és más többmagos gyűjtemények, és tovább javult a Java 1.6-mal.
Nem JVM
Egyes platformok közvetlen hardveres támogatást kínálnak a Java számára; Vannak olyan mikrovezérlők, amelyek szoftveres Java virtuális gép helyett hardveresen futtathatják a Java bájtkódot, és néhány ARM alapú processzor hardveresen támogathatja a Java bájtkód végrehajtását a Jazelle opción keresztül , bár a támogatás többnyire megszűnt az ARM jelenlegi implementációiban.
Automatikus memóriakezelés
A Java automatikus szemétgyűjtőt használ a memória kezelésére az objektum életciklusában . A programozó határozza meg, hogy mikor hoznak létre objektumokat, és a Java futásideje felelős a memória helyreállításáért, ha az objektumok már nincsenek használatban. Amint nem marad hivatkozás egy objektumra, az elérhetetlen memória automatikusan jogosult a szemétgyűjtő felszabadítására. A memóriaszivárgáshoz hasonló valami akkor is előfordulhat, ha a programozó kódja egy olyan objektumra hivatkozik, amelyre már nincs szükség, általában akkor, ha a szükségtelen objektumokat még használatban lévő tárolókban tárolják. Ha egy nem létező objektum metódusait hívják meg, akkor null mutató kivételt dob.
A Java automatikus memóriakezelési modelljének egyik ötlete az, hogy a programozók megkímélhetők a manuális memóriakezelés terhétől. Bizonyos nyelveken az objektumok létrehozásához szükséges memória implicit módon a veremben van lefoglalva, vagy kifejezetten kiosztva és elosztva a halomból . Ez utóbbi esetben a memóriakezelés felelőssége a programozót terheli. Ha a program nem osztja fel az objektumot, memóriaszivárgás lép fel. Ha a program megpróbálja elérni vagy kiosztani a már kiosztott memóriát, az eredmény meghatározhatatlan és nehezen megjósolható, és a program valószínűleg instabillá válik vagy összeomlik. Ez részben orvosolható intelligens mutatók használatával , de ezek többletköltséget és bonyolultságot jelentenek . Vegye figyelembe, hogy a szemétszedés nem akadályozza meg a logikai memóriaszivárgást , vagyis azokat, ahol a memória még mindig hivatkozik, de soha nem használták fel.
A szemétgyűjtés bármikor megtörténhet. Ideális esetben akkor fordul elő, ha a program tétlen. Garantáltan aktiválódik, ha nincs elegendő szabad memória a kupacban egy új objektum lefoglalásához; ez egy program pillanatnyi leállását okozhatja. A nyílt memóriakezelés Java -ban nem lehetséges.
A Java nem támogatja a C/C ++ stílusú mutatószámítást , ahol az objektumcímek számtani módon manipulálhatók (pl. Eltolás hozzáadásával vagy kivonásával). Ez lehetővé teszi a szemétszedő számára, hogy áthelyezze a hivatkozott tárgyakat, és biztosítja a típus biztonságát.
A C ++ nyelvhez és néhány más objektumorientált nyelvhez hasonlóan a Java primitív adattípusainak változóit vagy közvetlenül a mezőkben (objektumok esetén) vagy a veremben (metódusok) tárolják, nem pedig a halomban, mint általában a nem primitív adatok esetében típusok (de lásd a menekülési elemzést ). Ez a Java tervezőinek tudatos döntése volt teljesítményi okokból.
A Java többféle szemétgyűjtőt tartalmaz. A Java 9 óta a HotSpot alapértelmezés szerint a Garbage First Garbage Collector (G1GC) rendszert használja. Van azonban számos más szemétgyűjtő is, amelyekkel a halom kezelhető. A Java legtöbb alkalmazásához a G1GC elegendő. Korábban a Parallel Garbage Collector -t használták a Java 8 -ban.
A memóriakezelési probléma megoldása nem mentesíti a programozót az egyéb erőforrások, például hálózati vagy adatbázis -kapcsolatok, fájlkezelők stb. Megfelelő kezelésének terhétől, különösen kivételek esetén.
Szintaxis
A szintaxis a Java nagymértékben befolyásolja a C ++ és C . A strukturált, általános és objektumorientált programozás szintaxisát ötvöző C ++-val ellentétben a Java szinte kizárólag objektumorientált nyelvként készült. Minden kód osztályokba van írva, és minden adatelem objektum, kivéve a primitív adattípusokat (azaz egész számokat, lebegőpontos számokat, logikai értékeket és karaktereket), amelyek teljesítmény okokból nem objektumok. A Java újrafelhasználja a C ++ néhány népszerű aspektusát (például a printfmódszert).
A C ++ - val ellentétben a Java nem támogatja az operátorok túlterhelését vagy többszörös öröklését az osztályok számára, bár a többszörös öröklés támogatott az interfészeknél .
A Java a C ++ megjegyzéseihez hasonló megjegyzéseket használ . Három különböző stílusú megjegyzések: egy vonal stílusát jelölt két vágás ( //), egy többszörös vonal stílusa nyitott /*és zárt */, a Javadoc kommentálja stílus nyitott /**és zárt */. A Javadoc megjegyzésstílus lehetővé teszi a felhasználó számára, hogy futtassa a Javadoc futtatható fájlt, hogy dokumentációt készítsen a programhoz, és néhány integrált fejlesztői környezet (IDE), például az Eclipse el tudja olvasni , hogy a fejlesztők hozzáférhessenek az IDE dokumentációjához.
Szia világ példa
A hagyományos Hello world program Java nyelven írható:
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Prints the string to the console.
}
}
Minden forrásfájlt a nyilvános osztály után kell elnevezni, amelyhez mellékelni kell a toldalékot .java, például HelloWorldApp.java. Először bájtkódba kell fordítani, Java -fordító segítségével , .classutótaggal ( HelloWorldApp.classebben az esetben). Csak ezután lehet végrehajtani vagy elindítani. A Java forrásfájl csak egy nyilvános osztályt tartalmazhat, de több osztályt is tartalmazhat nem nyilvános hozzáférés-módosítóval és tetszőleges számú nyilvános belső osztályt . Ha a forrásfájl több osztályt tartalmaz, akkor egy (a classkulcsszó által bevezetett ) osztályt nyilvánossá kell tenni (előtte a publickulcsszó), és a forrásfájlt el kell nevezni ezzel a nyilvános osztálynévvel.
Azokat az osztályokat, amelyeket nem nyilvánosnak nyilvánítottak, bármely .javafájlban lehet tárolni . A fordító létrehoz egy osztályfájlt a forrásfájlban meghatározott minden osztályhoz. Az osztályfájl neve az osztály neve, .class csatolva. Az osztályfájlok generálásakor az anonim osztályokat úgy kezelik, mintha a nevük a befoglaló osztályuk neve, a $ és egy egész szám összefűzése lenne .
A kulcsszó public azt jelzi, hogy egy metódust más osztályok kódjából is meg lehet hívni, vagy hogy egy osztályt az osztályhierarchián kívüli osztályok is használhatnak. Az osztályhierarchia annak a könyvtárnak a nevével függ össze, amelyben a .java fájl található. Ezt hívják hozzáférési szint módosítónak. Más hozzáférési szint módosítók közé tartoznak a kulcsszavak private(olyan módszer, amely csak ugyanabban az osztályban érhető el) és protected(amely lehetővé teszi az azonos csomagból származó kód hozzáférését). Ha egy kódrészlet privát módszerekhez vagy védett módszerekhez próbál hozzáférni, a JVM aSecurityException
A staticmetódus előtti kulcsszó egy statikus módszert jelez , amely csak az osztályhoz van társítva, és nem az adott osztály egyetlen példányához. Csak statikus metódusok hívhatók meg objektumra való hivatkozás nélkül. A statikus metódusok nem férhetnek hozzá olyan osztálytagokhoz, amelyek nem statikusak. A nem statikusnak nevezett metódusok példamódszerek, amelyek működéséhez egy adott osztály egy adott példánya szükséges.
A kulcsszó voidazt jelzi, hogy a fő módszer nem ad vissza értéket a hívónak. Ha egy Java programnak hibakóddal kell kilépnie, akkor System.exit()kifejezetten hívnia kell .
A metódus neve mainnem kulcsszó a Java nyelven. Ez egyszerűen annak a módszernek a neve, amelyet a Java indító meghív, hogy átadja az irányítást a programnak. A felügyelt környezetben, például kisalkalmazásokban és vállalati JavaBeans -ekben futó Java -osztályok nem használnak main()módszert, vagy nem igényelnek módszert. Egy Java program több osztályt is tartalmazhat main, amelyek rendelkeznek metódusokkal, ami azt jelenti, hogy a virtuális gépnek kifejezetten meg kell adni, hogy melyik osztályból induljon el.
A fő módszer kell fogadnia egy tömböt a Stringtárgyakat. Megállapodás szerint úgy hivatkoznak rá, hogy argsbár bármilyen más jogi azonosító neve is használható. A Java 5 óta a fő módszer változó argumentumokat is használhat , formájában public static void main(String... args), lehetővé téve a fő metódus tetszőleges számú Stringargumentummal történő meghívását . Ennek az alternatív deklarációnak a hatása szemantikailag azonos (azzal a argsparaméterrel, amely még mindig Stringobjektumtömb), de lehetővé teszi egy alternatív szintaxist a tömb létrehozásához és továbbításához.
A Java indító elindítja a Java -t egy adott osztály betöltésével (a parancssorban vagy a JAR attribútumában megadva ), és elindítva annak public static void main(String[])módszert. Az önálló programoknak kifejezetten deklarálniuk kell ezt a módszert. A String[] argsparaméter Stringaz osztálynak továbbított argumentumokat tartalmazó objektumok tömbje . A paramétereket maingyakran parancssor segítségével továbbítják .
A nyomtatás egy Java szabványos könyvtár része: Az Systemosztály definiál egy nyilvános statikus mezőt out. Az outobjektum az PrintStreamosztály egy példánya, és számos módszert kínál az adatok szabványos nyomtatására , beleértve azt println(String)is, amely új sort fűz az átadott karakterlánchoz .
A karakterláncot "Hello World!"a fordító automatikusan String objektummá alakítja át.
Példa módszerekkel
// This is an example of a single line comment using two slashes
/*
* This is an example of a multiple line comment using the slash and asterisk.
* This type of comment can be used to hold a lot of information or deactivate
* code, but it is very important to remember to close the comment.
*/
package fibsandlies;
import java.util.Map;
import java.util.HashMap;
/**
* This is an example of a Javadoc comment; Javadoc can compile documentation
* from this text. Javadoc comments must immediately precede the class, method,
* or field being documented.
* @author Wikipedia Volunteers
*/
public class FibCalculator extends Fibonacci implements Calculator {
private static Map<Integer, Integer> memoized = new HashMap<>();
/*
* The main method written as follows is used by the JVM as a starting point
* for the program.
*/
public static void main(String[] args) {
memoized.put(1, 1);
memoized.put(2, 1);
System.out.println(fibonacci(12)); // Get the 12th Fibonacci number and print to console
}
/**
* An example of a method written in Java, wrapped in a class.
* Given a non-negative number FIBINDEX, returns
* the Nth Fibonacci number, where N equals FIBINDEX.
*
* @param fibIndex The index of the Fibonacci number
* @return the Fibonacci number
*/
public static int fibonacci(int fibIndex) {
if (memoized.containsKey(fibIndex)) return memoized.get(fibIndex);
else {
int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2);
memoized.put(fibIndex, answer);
return answer;
}
}
}
Különleges órák
Kisalkalmazás
A Java kisalkalmazások olyan programok voltak, amelyeket más alkalmazásokba ágyaztak be, általában egy webböngészőben megjelenített weboldalra. A Java kisalkalmazás API jelenleg elavult a Java 9 óta, 2017 -ben.
Servlet
A Java szervlet technológia egyszerű és következetes mechanizmust biztosít a webfejlesztőknek a webszerver funkcionalitásának kiterjesztésére és a meglévő üzleti rendszerek elérésére. A szervletek kiszolgálóoldali Java EE összetevők, amelyek válaszokat generálnak az ügyfelek kéréseire . Ez legtöbbször azt jelenti, hogy HTML -oldalakat kell generálni a HTTP -kérésekre válaszul , bár számos más szabványos szervletosztály is rendelkezésre áll, például a WebSocket kommunikációhoz.
A Java szervlet API -t bizonyos mértékig felváltotta (de még mindig a burkolat alatt használja) két szabványos Java -technológia webszolgáltatásokhoz:
- a Java API a RESTful webszolgáltatásokhoz (JAX-RS 2.0), amely hasznos az AJAX, JSON és REST szolgáltatásokhoz, és
- a Java API XML webszolgáltatásokhoz (JAX-WS) a SOAP webszolgáltatásokhoz .
Ezeknek az API -knak az alkalmazáskiszolgálókon vagy a Servlet -tárolókban való tipikus megvalósításai szabványos szervletet használnak minden interakció kezelésére a HTTP -kérésekkel és válaszokkal, amelyek a tényleges üzleti logika webszolgáltatási módszereire delegálódnak.
JavaServer oldalak
A JavaServer Pages (JSP) szerveroldali Java EE összetevők, amelyek válaszokat generálnak, általában HTML oldalakat, az ügyfelek HTTP kéréseire . A JSP -k Java kódot ágyaznak be egy HTML oldalba a speciális elválasztókkal és . A JSP -t egy Java szervletbe fordítják , amely önmagában egy Java alkalmazás, amikor először hozzáfér. Ezt követően a generált szervlet létrehozza a választ.
<%%>
Swing alkalmazás
A Swing egy grafikus felhasználói felület könyvtár a Java SE platformhoz. Lehetőség van egy másik megjelenés megadására a Swing csatlakoztatható külső és megjelenítő rendszere révén. A Windows , a GTK+ és a Motif klónjait a Sun szállítja. Az Apple Aqua megjelenést is biztosít a macOS számára . Ahol a külső megjelenések korábbi megvalósításait hiányosnak tekinthettük, a Swing a Java SE 6 -ban megoldja ezt a problémát az alapul szolgáló platformok natívabb grafikus felhasználói felület widget rajzolási rutinjainak használatával.
JavaFX alkalmazás
A JavaFX egy szoftverplatform asztali alkalmazások , valamint gazdag webes alkalmazások létrehozására és megjelenítésére, amelyek sokféle eszközön futhatnak. JavaFX helyettesíteni hivatott Swing , mint a standard GUI könyvtár Java SE , de mivel JDK 11 JavaFX nem volt a fő JDK és helyette egy külön modul. JavaFX támogatja a asztali számítógépek és böngészők a Microsoft Windows , Linux és MacOS . A JavaFX nem támogatja a natív operációs rendszer megjelenését.
Generics
2004 -ben a J2SE 5.0 részeként generikus gyógyszereket adtak hozzá a Java nyelvhez. A generikus gyógyszerek bevezetése előtt minden változó deklarációnak meghatározott típusúnak kellett lennie. A tárolóosztályok esetében ez például probléma, mert nincs egyszerű módja annak, hogy csak bizonyos típusú objektumokat fogadó tárolót hozzunk létre. A tároló általában egy osztály vagy interfész minden altípusán működik Object, vagy minden tárolt osztályhoz más tárolóosztályt kell létrehozni. A generikusok lehetővé teszik a fordítási idejű típusellenőrzést anélkül, hogy sok tárolóosztályt kellene létrehozni, amelyek mindegyike majdnem azonos kódot tartalmaz. A hatékonyabb kód engedélyezése mellett bizonyos futásidejű kivételek előfordulásának megakadályozása fordítási idejű hibák kiadásával is megakadályozható. Ha a Java megakadályozta az összes futásidejű típusú hiba ClassCastExceptionelőfordulását, akkor típusbiztonságos lenne .
2016 -ban a Java típusrendszere bizonytalannak bizonyult .
Kritika
A Java-val kapcsolatos kritikák közé tartozik a generikus alkalmazások, a sebesség, az előjel nélküli számok kezelése, a lebegőpontos aritmetika megvalósítása, valamint a biztonsági rések története az elsődleges Java virtuális gép-implementáció HotSpot-ban .
Osztálykönyvtárak
A Java Osztálykönyvtár a szabványos könyvtár , amelyet Java alkalmazások fejlesztésének támogatására fejlesztettek ki. Az Oracle irányítja , együttműködve másokkal a Java Community Process programon keresztül. Az ebben a folyamatban részt vevő vállalatok vagy magánszemélyek befolyásolhatják az API -k tervezését és fejlesztését. Ez a folyamat vitatott volt a 2010 -es években. Az osztálykönyvtár olyan funkciókat tartalmaz, mint:
- Az alapvető könyvtárak, amelyek a következők:
- IO/ NIO
- Hálózatépítés (MEGJEGYZÉS: új HTTP -ügyfél a Java 11 óta)
- Visszaverődés
- Egyidejűség
- Generics
- Scripting/Compiler
- Funkcionális programozás (Lambda, Streaming)
- Gyűjteménytárak, amelyek olyan adatstruktúrákat valósítanak meg , mint a listák , szótárak , fák , halmazok , sorok és kétvégű sorok vagy verem
- XML feldolgozó (elemző, átalakító, érvényesítő) könyvtárak
- Biztonság
- Nemzetközi és lokalizációs könyvtárak
- Az integrációs könyvtárak, amelyek lehetővé teszik az alkalmazásíró számára, hogy kommunikáljon külső rendszerekkel. Ezek a könyvtárak a következők:
- A Java Database Connectivity (JDBC) API az adatbázis -hozzáféréshez
- Java Naming and Directory Interface (JNDI) a kereséshez és felfedezéshez
- RMI és CORBA az elosztott alkalmazások fejlesztéséhez
- JMX alkalmazások kezelésére és felügyeletére
-
Felhasználói felület könyvtárak, amelyek tartalmazzák:
- A (nehézsúlyú vagy natív ) Abstract Window Toolkit (AWT), amely GUI -összetevőket, az alkatrészek elhelyezésének eszközeit és az összetevők eseményeinek kezelését biztosítja
- A (könnyű) Swing könyvtárak, amelyek AWT-re épülnek, de az AWT widgetry (nem natív) implementációit biztosítják
- API -k a hang rögzítéséhez, feldolgozásához és lejátszásához
- JavaFX
- A Java virtuális gép platformfüggő megvalósítása, amely a Java könyvtárak és harmadik féltől származó alkalmazások bájtkódjainak végrehajtásának eszköze
- Bővítmények, amelyek lehetővé teszik az appletek futtatását a webböngészőben
- Java Web Start , amely lehetővé teszi a Java -alkalmazások hatékony elosztását a végfelhasználók számára az interneten
- Engedélyezés és dokumentáció
Dokumentáció
A Javadoc egy átfogó dokumentációs rendszer, amelyet a Sun Microsystems hozott létre . Szervezett rendszert biztosít a fejlesztőknek a kódok dokumentálására. Javadoc hozzászólás van egy extra csillaggal az elején, azaz a zárójelek /**és */, mivel a normális többsoros megjegyzéseket Java elindult a zárójelek /*és */és egysoros megjegyzéseket elindul a vonalat //.
Megvalósítások
Az Oracle Corporation a jelenlegi tulajdonosa a Java SE platform hivatalos implementációjának, miután 2010. január 27 -én felvásárolták a Sun Microsystems -t. Ez a megvalósítás a Java eredeti, Sun által megvalósított megvalósításán alapul. Az Oracle implementáció elérhető a Microsoft Windows (továbbra is működik XP -n, míg jelenleg csak a későbbi verziók támogatottak hivatalosan), macOS , Linux és Solaris rendszereken . Mivel a Java-ból hiányzik az Ecma International , az ISO/IEC, az ANSI vagy más, harmadik féltől származó szabványügyi szervezet által elismert formális szabványosítás , az Oracle implementáció a de facto szabvány .
Az Oracle implementáció két különböző disztribúcióba van csomagolva: a Java Runtime Environment (JRE), amely tartalmazza a Java programok futtatásához szükséges, és a végfelhasználóknak szánt részeket, és a Java Development Kit (JDK), amely szoftverfejlesztőknek, és olyan fejlesztőeszközöket tartalmaz, mint a Java -fordító , a Javadoc , a Jar és a hibakereső . Az Oracle kiadta a GraalVM -et is , amely egy nagy teljesítményű Java dinamikus fordító és értelmező.
Az OpenJDK egy másik figyelemre méltó Java SE megvalósítás, amely a GNU GPL licencével rendelkezik. A megvalósítás akkor kezdődött, amikor a Sun megkezdte a Java forráskód kiadását a GPL alatt. A Java SE 7 -től kezdve az OpenJDK a hivatalos Java referencia megvalósítás.
A Java célja, hogy a Java összes megvalósítását kompatibilisé tegye. Korábban a Sun védjeggyel kapcsolatos engedélye a Java márka használatához ragaszkodik ahhoz, hogy minden megvalósítás kompatibilis legyen . Ez jogi vitát eredményezett a Microsofttal, miután a Sun azt állította, hogy a Microsoft megvalósítása nem támogatja az RMI-t vagy a JNI-t, és saját, platform-specifikus szolgáltatásokat is hozzáadtak. A Sun 1997 -ben beperelte magát, és 2001 -ben 20 millió amerikai dolláros megállapodást, valamint bírósági határozatot nyert a Suntól az engedély feltételeinek érvényesítésére. Ennek eredményeként a Microsoft már nem szállítja a Java -t a Windows rendszerrel .
A platformfüggetlen Java elengedhetetlen a Java EE számára , és a megvalósítás igazolásához még szigorúbb érvényesítésre van szükség. Ez a környezet lehetővé teszi a hordozható kiszolgálóoldali alkalmazásokat.
Használja a Java platformon kívül
A Java programozási nyelv szoftverplatform jelenlétét igényli az összeállított programok végrehajtásához.
Az Oracle biztosítja a Java platformot a Java használatához. Az Android SDK egy alternatív szoftverplatform, amelyet elsősorban Android -alkalmazások fejlesztésére használnak saját GUI rendszerrel.
Android
A Java nyelv az Android , a nyílt forráskódú mobil operációs rendszer egyik alappillére . Bár a Linux kernelre épülő Android nagyrészt C nyelven van írva, az Android SDK a Java nyelvet használja az Android alkalmazások alapjául, de nem használ semmilyen szabványos GUI, SE, ME vagy más megállapított Java szabványt. Az Android SDK által támogatott bytecode nyelv nem kompatibilis a Java bájtkóddal, és saját virtuális gépén fut, alacsony memóriájú eszközökre, például okostelefonokra és táblagépekre optimalizálva . Az Android verziótól függően a bájtkódot vagy a Dalvik virtuális gép értelmezi, vagy az Android Runtime natív kódba fordítja .
Az Android nem biztosítja a teljes Java SE szabványos könyvtárat, bár az Android SDK tartalmaz egy nagy részhalmaz független megvalósítását. Támogatja a Java 6 és néhány Java 7 funkciót, és a szabványos könyvtárral ( Apache Harmony ) kompatibilis megvalósítást kínál .
Vita
A Java-hoz kapcsolódó technológia alkalmazása az Androidban jogi vitához vezetett az Oracle és a Google között. 2012. május 7 -én egy san francisco -i esküdtszék megállapította, hogy ha az API -k szerzői jogvédelem alá tartozhatnak, akkor a Google megsértette az Oracle szerzői jogait a Java használatával az Android -eszközökön. William Alsup járásbíró 2012. május 31 -én úgy határozott, hogy az API -k nem védhetők szerzői joggal, de ezt az Egyesült Államok Fellebbviteli Bírósága 2014 májusában visszavonta. 2016. május 26 -án a kerületi bíróság a Google javára döntött. , a Java API szerzői jogok megsértésének megállapítása az Android rendszerben tisztességes használatnak minősül. 2018 márciusában a fellebbviteli bíróság hatályon kívül helyezte ezt az ítéletet, és a San Francisco -i szövetségi bíróság elé terjesztette a kártérítés megállapításának ügyét. Google nyújtott be petíciót a végzés certiorari a Legfelsőbb Bíróság az Egyesült Államok a január 2019 megtámadni a két megállapítás, hogy készült a Fellebbviteli Bíróság az Oracle javára. 2021. április 5-én a Bíróság 6-2-re a Google javára ítélte, hogy a Java API-k használatát méltányos használatnak kell tekinteni . A bíróság azonban nem volt hajlandó dönteni az API -k szerzői jogáról, helyette úgy döntött, hogy döntését úgy határozza meg, hogy a Java API szerzői jogát "pusztán az érvek kedvéért" tekinti.
Lásd még
- C#
- C ++
- A Dalvik , amelyet a régi Android verziókban használtak, és nem JIT Android Runtime váltotta fel
- Determinisztikus párhuzamos Java
- Java virtuális gépek listája
- Java API -k listája
- A JVM nyelvek listája
A Java összehasonlítása más nyelvekkel
Hivatkozások
Hivatkozott munkák
- Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014). A Java® nyelvi specifikáció (PDF) (Java SE 8 szerk.). Archivált (PDF) az eredetiből 2014. október 21 -én . Letöltve : 2014. november 18 .
- Gosling, James; Joy, Bill ; Steele, Guy L., Jr .; Bracha, Gilad (2005). A Java nyelvi specifikáció (3. kiadás). Addison-Wesley. ISBN 0-321-24678-0. Archiválva az eredetiből 2012. február 14 -én . Letöltve : 2019. február 8 .
- Lindholm, Tim; Yellin, Frank (1999). A Java virtuális gép specifikációja (2. kiadás). Addison-Wesley. ISBN 0-201-43294-3. Archiválva az eredetiből 2011. szeptember 25 -én . Letöltve : 2019. február 8 .
Külső linkek
-
A Java szótári definíciója a Wikiszótárban -
Java -hoz kapcsolódó média a Wikimedia Commons -ban -
Java programozás a Wikikönyvekben -
Java -val kapcsolatos tananyagok a Wikiversity -en