itthon / Biztonság / Elkészült a java programozási nyelv. Bevezetés a Java-ba. A Java, mint programozási nyelv előnyei

Elkészült a java programozási nyelv. Bevezetés a Java-ba. A Java, mint programozási nyelv előnyei

Java nyelv. Bevezetés.

Sokáig nehéz volt elképzelni egy számítógépes magazint Java nyelvről szóló cikk nélkül. Még olyan népszerű újságok és magazinok is írtak róla, mint a The New York Times, a The Washington Post és a Business Week.

Lehetetlen visszaemlékezni arra, hogy az Országos Közszolgálati Rádió valaha is szentelt volna tízperces műsort egy programnyelvnek. Hogy ez jó vagy rossz, az a nézőponttól függ. 100 millió dolláros beruházás a termelésbe szoftver egy adott programozási nyelv használatával készült?! A CNN, a CNBC és más médiumok beszélnek és beszélnek még mindig arról, hogy a Java hogyan tudja és fogja ezt megtenni.

Ez a könyv azonban komoly programozóknak szól, és mivel a Java egy komoly programozási nyelv, sok mindent meg kell vizsgálnunk. Tehát nem merülünk bele a reklámígéretek elemzésébe, és megpróbáljuk kideríteni, hogy mi az igaz és mi a fikció. Ehelyett elég részletesen leírjuk a Java nyelvet, mint programozási nyelvet (beleértve természetesen azokat a funkciókat is, amelyek lehetővé teszik az internetes munkavégzést, ami valójában akkora reklámfelhajtást okozott). Ezt követően megpróbáljuk elválasztani a valóságot a fantáziától azáltal, hogy elmagyarázzuk, mire képes a Java nyelv és mire nem.

Eleinte szakadék tátongott a reklámígéretek és a Java nyelv valós lehetőségei között. Ahogy érett, a technológia stabilabbá és megbízhatóbbá vált, az elvárások pedig ésszerű szintre estek. A Java-t manapság egyre gyakrabban használják „middleware” létrehozására, amely kommunikál a kliensek és a szerver erőforrásai (például adatbázisok) között.

Bár ezek a fontos alkalmazások nem meglepőek, a Java nyelv ezen a területen bizonyult a leghasznosabbnak gépfüggetlensége, többszálú és hálózati programozási képességei miatt. Emellett a Java nyelv átvette a vezető szerepet a beágyazott rendszerekben, de facto szabványává vált a hordozható eszközök, virtuális kioszkok, fedélzeti autós számítógépek és hasonlók számára. Azonban az első kísérletek a széles körben használt Java programok újraírására személyi számítógépek sikertelenek voltak - az így létrejövő alkalmazások alacsony fogyasztásúnak és lassúnak bizonyultak. Az új verzió megjelenésével a problémák egy része megoldódott, de be kell látni, hogy a felhasználókat általában egyáltalán nem érdekli, hogy a megvásárolt programok milyen nyelven íródnak. Úgy gondoljuk, hogy a Java nyelv fő előnyei az új típusú eszközök és alkalmazások létrehozásában, nem pedig a meglévő programok újraírásában fognak megjelenni.

Java nyelv, mint programozási eszköz

Hogyan lépte túl a Java programozási nyelv hirdetési ígéreteit. Kétségtelenül ez az egyik legjobb nyelv, amely komoly programozók számára elérhető. A Java potenciálisan nagyszerű programozási nyelv lehet, de valószínűleg már késő. Amikor egy új programozási nyelv megjelenik, azonnal felmerül az a bosszantó probléma, hogy kompatibilis a korábban létrehozott szoftverekkel. Sőt, még ha módosítani is lehet ezeket a programokat anélkül, hogy a szövegüket megváltoztatnák, a közönség által oly melegen fogadott nyelv, például a Java nyelv alkotói számára nehéz közvetlenül kimondani: "Igen, lehet, hogy hibát követtek el az X verzió fejlesztése során, de az Y verzió jobb lesz." Ebből kifolyólag a további fejlesztések megjelenésére várva le kell szögeznünk, hogy a Java nyelv szerkezete a közeljövőben lényegesen nem fog változni.

A nyilvánvaló kérdés: Hogyan fejlődött a Java nyelv?". Kiderült, hogy ez nem magának a programozási nyelvnek a fejlesztésével történt, hanem a Java nyelven írt programok könyvtárainak alapvető megváltoztatásával. A Sun Microsystems mindent megváltoztatott: az egyes könyvtári funkciók elnevezésétől kezdve (értelmesebbé tette őket) és a grafikus modulok működési módjai (az események kezelésének megváltoztatásával és a dolgozói programok részbeni átírásával), és befejezve a nyelv olyan új funkcióinak létrehozását, mint például a nyomtatási lehetőségek, amelyek nem voltak a Java 1.0-ban. sokkal hasznosabb programozási platform mindennél előző verziók Java nyelv.

A Microsoft kiadta saját J++ nevű termékét, amely a Java nyelvhez kapcsolódik. A J++ nyelvet egy Java Virtual Machine-kompatibilis virtuális gép értelmezi bájtkód végrehajtásakor, de a külső kódhoz fűződő interfészek jelentősen eltérnek e nyelvek között. A J++ és a Java nyelvek szintaxisa szinte azonos. A Microsoft azonban további nyelvi konstrukciókat készített. Ezek kivételével mindegyik meglehetősen kétes értékű Windows interfész API. Amellett, hogy ezeknek a nyelveknek ugyanaz a szintaxisa, az alapvető könyvtáraik (karakterláncok, segédprogramok, hálózati programozási eszközök, többszálú eszközök, matematikai könyvtárak stb.) lényegében megegyeznek.

A grafikus könyvtárak, a felhasználói felület és a távoli objektumokhoz való hozzáférés azonban teljesen eltérő ezeknél a nyelveknél. Jelenleg a Microsoft már nem támogatja a J++ nyelvet, kifejlesztett egy új C# nyelvet, amely sok hasonlóságot mutat a Java-val, de egy másik virtuális gépet használ. Ez a könyv nem fedi a J++ vagy a C# nyelvet.

A Java nyelv előnyei

1) A Java nyelv egyik fő előnye az független attól a platformtól, amelyen a programok futnak: Ugyanez a kód futtatható Windows, Solaris, Linux, Machintosh stb. operációs rendszereken.
Erre akkor van igazán szükség, ha a programokat az internetről töltik le a későbbi végrehajtáshoz különböző operációs rendszerek alatt.

2) További előnye, hogy a Java nyelv szintaxisa hasonló a C ++ nyelv szintaxisához, és a C és C ++ nyelveket ismerő programozóknak nem nehéz megtanulni. Igaz, a Visual Basic nyelvet ismerő programozók számára ez a szintaxis szokatlan lehet.

Ha még soha nem programozott C++ nyelven, akkor előfordulhat, hogy az ebben a részben használt kifejezések egy része nem egyértelmű az Ön számára. Ebben az esetben kihagyhatja. Mire a 6. fejezet végére ér, ezek a kifejezések ismerősek lesznek számodra.

3) Továbbá, Java - egy teljesen objektum-orientált nyelv, még inkább, mint a C++. A Java nyelv összes entitása objektum, kivéve néhány primitív típust, például számokat. (Mivel az objektum-orientált programozással könnyű komplex projekteket fejleszteni, leváltotta a régebbi strukturált programozást. Ha nem jártas az objektum-orientált programozásban, a 3-6. fejezetekben minden szükséges információt megadunk róla.)

Nem elég azonban a C++ nyelv egy másik, kissé továbbfejlesztett dialektusát kidolgozni. Alapvető fontosságú, hogy Java-ban könnyebben lehet hibamentes programokat fejleszteni, mint C++-ban. Miért? A Java nyelv tervezői hosszasan gondolkodtak azon, hogy a C++ nyelven írt programok miért olyan hibásak. A Java nyelvet olyan eszközökkel látták el, amelyek kiküszöbölik annak lehetőségét, hogy olyan programokat hozzanak létre, amelyek elrejtik a leggyakoribb hibákat. Ehhez a következőket kell elvégezni a Java nyelven.

4) A memória explicit lefoglalásának és felszabadításának lehetősége kizárt.
A Java nyelv memóriáját a szemétgyűjtő mechanizmus automatikusan felszabadítja. A programozó garanciát vállal a helytelen memóriahasználatból eredő hibákra.

5) Valódi tömbök kerülnek bevezetésre, és a mutató aritmetika tiltott.
Most a programozók elvileg nem tudnak adatokat törölni a memóriából visszaélés mutatók.

6) A hozzárendelési operátor és az egyenlőségi összehasonlító operátor összetévesztésének lehetősége kizárt.
Most már nem is tudod lefordítani az if(ntries = 3) . . . (A Visual Basic programozók itt egyáltalán nem észlelnek problémát, mivel ez a hiba okozza a legtöbb zűrzavart a C és C++ nyelveken).

7) A többszörös öröklődés kizárt. Ezt egy új koncepció váltotta fel - egy interfész, amelyet az Objective C nyelvből kölcsönöztek.
Egy interfész szinte mindent megad a programozónak, amit a programozó többszörös öröklődésből nyerhet, miközben elkerüli az osztályhierarchiák kezelésének bonyolultságát.

A Java nyelv jellemzői

Egyszerű
Értelmezve
Megosztott
Megbízható
Biztonságos
gép független
Objektum orientált
nagy teljesítményű
többszálú
dinamikus
Számítógép architektúra független

Ezek közül néhányat már érintettünk az utolsó részben. Ebben a részben a következőket fogjuk: idézeteket közölni a Java nyelvi kézikönyvből, feltárva a nyelv jellemzőit; Osszuk meg az olvasókkal néhány gondolatot a nyelv bizonyos tulajdonságairól, saját tapasztalataink alapján a legújabb verzióval kapcsolatban.

Egyszerű

Olyan rendszert szerettünk volna létrehozni, amely könnyen programozható, nem igényel többletképzést és figyelembe veszi a mindenkori gyakorlatot és programozási szabványokat. Ezért annak ellenére, hogy a C++ nyelvet alkalmatlannak tartottuk ezekre a célokra, a Java nyelvet úgy terveztük, hogy a lehető leghasonlóbb legyen, hogy a rendszer könnyebben elérhető legyen. A Java nyelv nem tartalmaz sok olyan alulhasznált, homályos és homályos C++ funkciót, amelyekről úgy gondoljuk, hogy többet ártanak, mint használnak.

A Java nyelv szintaxisa lényegében a C++ nyelv szintaxisának finomított változata. Ez a nyelv nem tartalmaz fejléc fájlokat, mutató aritmetikát (és magukat mutatókat), struktúrákat, uniókat, operátor túlterhelést, virtuális alaposztályokat és így tovább. (A Java és a C++ nyelvek közötti különbségeket a C++ nyelvről szóló megjegyzések írják le a könyvben szétszórva.) A fejlesztők azonban nem igyekeztek kijavítani a C++ nyelv minden hiányosságát.

Például a switch utasítás szintaxisa a Java nyelvben változatlan maradt. A C++ nyelv ismeretében könnyű lesz átváltani a Java nyelv szintaxisára.
Ha általában vizuális programozási környezetet (például Visual Basic) használ, akkor a Java nyelvet nehéznek találja.
Szintaxisa gyakran meglehetősen furcsán néz ki (bár nem nehéz megérteni a kifejezés jelentését). Ennél is fontosabb, hogy ha Java nyelven dolgozunk, sokkal többet kell programozni. A Visual Basic nyelv szépsége abban rejlik, hogy vizuális programozási környezete lehetővé teszi az alkalmazási infrastruktúra szinte automatikus létrehozását. Ugyanezen eredmény eléréséhez a Java nyelv használatával kézzel kell programozni, de ez sokkal rövidebb programokat eredményez.

Létezik azonban egy harmadik fajta programozási környezet is, amely lehetővé teszi programok létrehozását a „húzd és vidd” technológiával.

Az egyszerűség másik aspektusa a rövidség. A Java nyelv egyik célja, hogy lehetővé tegye kisgépeken teljesen önállóan futtatható programok fejlesztését. A fő tolmács és osztálytámogatás mérete körülbelül 40 KB; a szabványos könyvtárak és szálfűző eszközök (különösen az önálló mikrokernel) további 17:Kb-t vesznek igénybe.
Ez óriási siker. Ne feledje azonban, hogy a grafikus felhasználói felület támogatási könyvtárai sokkal nagyobbak.

Objektum orientált

Egyszerűen fogalmazva, az objektum-orientált programozás olyan programozási technika, amely az adatokra (azaz objektumokra) és az ezek elérésének eszközeire összpontosít. Az asztalos hasonlatot levonva a tárgyorientált mesterember elsősorban az általa készített székre koncentrál, és csak másodsorban érdeklődik az ehhez szükséges eszközök iránt; ugyanakkor a nem tárgyorientált asztalos csak a szerszámaira gondol. A Java és a C++ objektumorientált tulajdonságai lényegében megegyeznek.

Az objektumorientáció az elmúlt 30 évben már bevált, és e nélkül elképzelhetetlen egy modern programozási nyelv. Valójában a Java nyelv objektumorientált jellemzői hasonlóak a C++-éhoz. A fő különbség köztük a többszörös öröklődés mechanizmusában rejlik, amelyre a Java nyelv jobb megoldást talált, valamint a Java nyelv metaosztály modelljében.

A tükrözés (5. fejezet) és az objektum-szerializálás (12. fejezet) mechanizmusai lehetővé teszik, hogy perzisztens objektumokat és eszközöket valósítson meg kész komponenseken alapuló grafikus felhasználói felületek létrehozásához.

Ha még soha nem programozott objektum-orientált nyelven, nézze meg alaposan a 4-6. fejezetet. Ezek a fejezetek bemutatják az objektum-orientált programozás alapjait, és bemutatják, hogyan használható komplex projektek fejlesztésére hagyományos eljárási nyelveken, mint például a C vagy a Basic.

Megosztott

A Java nagy programkönyvtárral rendelkezik a TCP/IP (Transmission Control Protocol/Internet Protocol) protokollokon alapuló adatátvitelhez, például HTTP (Hypertext Transfer Protocol) vagy FTP (File Transfer Protocol). fájlátviteli protokoll). A Java nyelven írt alkalmazások a hálózaton keresztül megnyithatnak és elérhetnek objektumokat a és használatávalURL-ek (Uniform Resource Location – univerzális erőforráscím) olyan egyszerűen, mint helyi hálózat.

A Java nyelv hatékony és kényelmes eszközöket biztosít a hálózaton végzett munkához. Bárki, aki valaha is próbált már más nyelvű internetes programokat írni, kellemesen meg fog lepődni, hogy a legnehezebb feladatokat, például a hálózati kapcsolatok megnyitását (sockets kapcsolat) milyen könnyen megoldják a Java nyelven. Az elegáns, úgynevezett servletekből (servletekből) álló mechanizmus rendkívül hatékonysá teszi a szerveren végzett munkát.

A servleteket sok népszerű támogatja webszerverek. (A hálózatépítésről a második kötetben lesz szó.) Az elosztott objektumok közötti kommunikációt a Java nyelven egy távoli metódusok hívásának mechanizmusa biztosítja (ezt a témát a második kötet is tárgyalja).

Megbízható

A Java nyelvet olyan programok létrehozására tervezték, amelyeknek minden helyzetben megbízhatóan kell működniük. A Java nyelv középpontjában a korai felismerés áll lehetséges hibákat, dinamikus ellenőrzés (futás közben), és a hibaveszélyes helyzetek elkerülése... A Java és a C++ között egyetlen lényeges különbség a Java nyelv mutatómodellje, amely kiküszöböli a memória felülírásának és az adatsérülésnek a lehetőségét.

Ez az ingatlan is nagyon hasznos. A Java nyelvi fordító olyan hibákat észlel, amelyeket más nyelveken csak futás közben észlel. Ráadásul azok a programozók, akik egy rossz mutató miatt sok órát kerestek memóriasérülési hibát, nagyon örülnek annak, hogy a Java nyelvben elvileg ilyen problémák nem merülhetnek fel.

Ha valaha is programozott Visual Basic vagy COBOL nyelveken, amelyek nem használnak kifejezetten mutatókat, előfordulhat, hogy nem érti, miért olyan fontos ez. A C programozók sokkal kevésbé szerencsések. Mutatókra van szükségük a karakterláncok, tömbök, objektumok és még fájlok eléréséhez. A Visual Basic programozása során erre nincs szükség, és a programozónak nem kell aggódnia amiatt, hogy a memóriát lefoglalja ezekhez az entitásokhoz. Másrészt egy olyan nyelven, amelyen nincsenek mutatók, sok adatszerkezetet nagyon nehéz megvalósítani. Az olyan közönséges struktúráknak, mint a karakterláncok és tömbök, nincs szükség mutatókra. A mutatók teljes ereje csak ott mutatkozik meg, ahol nem lehet eltekinteni tőlük, például alkotáskor linkelt listák. A Java programozó örökre megkíméli a rossz mutatókat, a helytelen kiosztást és a memóriaszivárgást.

Biztonságos

A Java nyelvet hálózati vagy elosztott környezetben való használatra tervezték. Emiatt nagy figyelmet fordítottak a biztonságra. A Java nyelv lehetővé teszi olyan rendszerek létrehozását, amelyek védettek a vírusok és a manipuláció ellen.

Az első kiadásban azt írtuk: "Soha ne mondd, hogy soha", és igazunk volt. A Princeton Egyetem biztonsági szakértőiből álló csoport nem sokkal azután fedezte fel az első biztonsági hibákat a Java 1.0-ban, hogy a JDK első verziója megjelent. Ráadásul mind ők, mind más szakemberek továbbra is egyre több hibát találtak a Java nyelv összes későbbi verziójának biztonsági mechanizmusaiban.

A helyzet pozitívuma, hogy a Java Language Development Group zéró toleranciát hirdetett a biztonsági rendszer bármely hibájával szemben, és azonnal hozzálátott a kisalkalmazás biztonsági mechanizmusában talált problémák kijavításához. Különösen a Java nyelvi tolmács belső specifikációinak közzétételével a Sun sokkal könnyebbé tette a rejtett biztonsági hibák felkutatását, és független szakértőknek adta ki azokat.

Ez növelte annak valószínűségét, hogy hamarosan minden biztonsági rést felfedeznek. Mindenesetre rendkívül nehéz átverni a Java nyelv biztonsági rendszerét. Az eddig talált hibák szinte észrevehetetlenek voltak, számuk (viszonylag) kicsi.

A Sun biztonsági weboldalának URL-címe a következő: http://java.sun.com/sfaq/.

Íme néhány olyan helyzet, amelyek előfordulását a Java biztonsági rendszer megakadályozza.

1) A végrehajtható program veremtúlcsordulása, amit az interneten elterjedt hírhedt "féreg" okozott.

2) A folyamat számára kijelölt területen kívül eső memóriaterületek sérülése.

3) Helyi fájlok olvasása és írása biztonságos osztálybetöltő, például webböngésző használatakor, amely tiltja az ilyen fájlokhoz való hozzáférést.

Mindezek a biztonsági intézkedések megfelelőek és általában hibátlanul működnek, de a diszkréció soha nem árt. Bár az eddig felfedezett hibák korántsem voltak triviálisak, és a megtalálásuk részleteit gyakran titokban tartják, el kell ismerni, hogy a Java nyelv biztonságának bizonyítása valószínűleg már nem lehetséges.

Idővel új biztonsági funkciókkal bővült a nyelv. Az 1.1-es verziótól kezdődően a Java nyelv bevezette a digitálisan aláírt osztályok fogalmát. Ha digitális aláírással ellátott osztályt használ, biztos lehet a szerzőjében. Ha megbízik benne, megadhatja ennek az osztálynak a gépén elérhető összes jogosultságot.

A Microsoft által javasolt alternatív kódtovábbítási mechanizmus az ActiveX technológián alapul, és a biztonság érdekében csak digitális aláírásokat használ. Nyilvánvalóan ez nem elég – a Microsoft-szoftverek bármely felhasználója tanúsíthatja, hogy a jól ismert gyártók programjai gyakran összeomlanak, ami az adatok sérülésének kockázatát hordozza magában. A Java nyelv biztonsági rendszere sokkal erősebb, mint az ActiveX technológia, mert az indítástól kezdve irányítja az alkalmazást, és nem engedi, hogy kárt okozzon.

építészet független

A fordító létrehoz egy objektumfájlt, amelynek formátuma nem függ a számítógép architektúrájától – a lefordított program bármely processzoron végrehajtható a Java programvégrehajtó rendszer vezérlése alatt. Ehhez a Java nyelvi fordító olyan parancsokat, bájtkódot generál, amelyek nem függenek az adott számítógép architektúrától. A bájtkód úgy van megtervezve, hogy bármilyen géppel könnyen értelmezhető legyen, vagy menet közben lefordítható legyen gépfüggő kódra.

Nem új ötlet. Több mint 20 évvel ezelőtt a Niclaus Wirth által kifejlesztett Pascal implementációs rendszer és az UCSD Pascal rendszer is ugyanazt a technológiát használta. A bájtkódok használata nagy nyereséget ad a programvégrehajtásban (a szinkron fordítás azonban sok esetben ezt kompenzálja). A Java nyelv fejlesztői nagyszerű munkát végeztek egy olyan bájtkód utasításkészlet kifejlesztésében, amely a legtöbben jól működik modern számítógépek, könnyen lefordítható valódi gépi utasításokká.

gép független

A C és C++ nyelvekkel ellentétben a Java specifikációnak nincsenek olyan vonatkozásai, amelyek a megvalósítási rendszertől függenek. Az alapadattípusok mérete és a rajtuk végrehajtott aritmetikai műveletek egyaránt jól meghatározottak.

Például az int típus a Java nyelvben mindig 32 bites egész számot jelent. C-ben és C++-ban az int típus jelenthet 16 bites egész számot, 32 bites egész számot vagy tetszőleges méretű egész számot, ahogyan azt egy adott fordító fejlesztője választotta. Az egyetlen megkötés az, hogy az int mérete nem lehet kisebb egy rövid int méreténél és nagyobb, mint egy hosszú int. A numerikus típusok rögzített mérete elkerüli a programok bekapcsolásával járó bosszúságokat különböző számítógépek. A bináris adatok tárolása és továbbítása rögzített formátumban történik, így elkerülhetőek a különböző platformokon eltérő bájtsorrenddel kapcsolatos félreértések ("big endian/little endian" konfliktus). A vonalak tárolva vannak szabványos formátum Unicode.

A rendszer részét képező könyvtárak gépfüggetlen interfészt határoznak meg. A nyelv például egy absztrakt Window osztályt és annak implementációit kínálja Unix, Windows és Macintosh operációs rendszerekhez.

Bárki, aki próbált már olyan programot írni, amely egyformán jól fut Windowson, Macintoshon és a Unix tíz változatán, tudja, hogy ez nagyon nehéz feladat. A Java-verzió hősies kísérletet tett a probléma megoldására egy egyszerű eszközkészlettel, amely a gyakori felhasználói felület elemeit számos szoftverplatformhoz igazítja. Sajnos a könyvtár, amelyre rengeteg munkát fordítottak, nem tette lehetővé, hogy különböző platformokon elfogadható eredményeket érjünk el. (Ugyanakkor különböző hibák jelentek meg a különböző platformokon lévő grafikus programokban.)

Ez azonban csak a kezdet volt. Sok alkalmazásban a gépfüggetlenség sokkal fontosabb, mint a grafikus felhasználói felület kifinomultsága. Ezek az alkalmazások profitáltak a Java 1.0 bevezetéséből. A grafikus felhasználói felület eszközkészletét azonban most teljesen újratervezték, és már nem függ a gazdaszámítógép felhasználói felületétől. Egy új verzió tartalmasabbak és véleményünk szerint vonzóbbak a felhasználó számára, mint az előzőek.

Értelmezve

A Java nyelvi tolmács bármely gépre elküldhető, és közvetlenül azon hajthatja végre a bájtkódot. Mivel a linkszerkesztés egyszerűbb folyamat, a programozás sokkal gyorsabbá és hatékonyabbá válhat.

Talán ez előny az alkalmazásfejlesztésben, de az idézet egyértelmű túlzás. Mindenesetre a JSDK-ban (Java Software Development Kit) található Java nyelvi fordító meglehetősen lassú. (Egyes harmadik típusú fordítók, például az IBM-é, sokkal gyorsabbak.) Az újrafordítási sebesség csak egy tényező a programozási környezet hatékonyságában. Ha összehasonlítjuk a Java és a Visual Basic programozási környezetek sebességét, csalódni lehet.

nagy teljesítményű

Míg az általában értelmezett bájtkódok teljesítménye több mint elegendő, vannak helyzetek, amikor még jobb teljesítményre van szükség. A bájtkódok menet közben (futás közben) lefordíthatók gépi kódokká az adott processzorhoz, amelyen az alkalmazás fut.

Ha egy tolmácsot használnak a bájtkódok végrehajtására, ne használja a "" kifejezést nagy teljesítményű". Sok platformon azonban másfajta fordítás is lehetséges, amelyet szinkron fordítók (just-in-time fordítók-JIT) biztosítanak. Ezek lefordítják a bájtkódot gépfüggő kódra, az eredményt a memóriában tárolják, majd meghívják. Mivel ezt az értelmezést csak egyszer hajtják végre, ez a megközelítés sokszorosára növeli a sebességet.

Bár a szinkron fordítók még mindig lassabbak, mint a gépspecifikus fordítók, legalább sokkal gyorsabbak, mint az interpreterek, 10-szeres vagy akár 20-szoros gyorsítást biztosítva egyes programok esetében. Ezt a technológiát folyamatosan fejlesztik, és végül olyan sebességet érhet el, amelyet a hagyományos fordítók soha nem fognak túlszárnyalni. Például egy szinkron fordító képes meghatározni, hogy melyik kódrészletet hajtják végre gyakrabban, és optimalizálhatja azt a végrehajtási sebességhez.

TÖBBSZÁLA

Jobb interaktivitást és programvégrehajtást biztosít.

Ha valaha is megpróbált többszálat bármilyen más programozási nyelven használni, akkor kellemesen meg fog lepődni, hogy ez mennyire egyszerű Java nyelven. A Java nyelv szálai kihasználhatják a többprocesszoros rendszerek előnyeit, ha az operációs rendszer ezt lehetővé teszi. Sajnos a legtöbb platformon a folyamok megvalósítása nagyon eltérő, és a Java nyelvi tervezők nem tesznek kísérletet az egységesség elérésére. Csak a szálak hívásának kódja marad ugyanaz minden gépen; A Java nyelv a többszálú megoldás megvalósítását az alapul szolgáló operációs rendszerre vagy szálfűzési könyvtárra hagyja. (Az áramlásokat a 2. kötet ismerteti.) Ennek ellenére a szervezés egyszerűsége többszálú számítástechnika vonzóvá teszi a Java nyelvet a szerverszoftver-fejlesztés számára.

dinamikus

A Java sok szempontból dinamikusabb, mint a C vagy a C++. Úgy tervezték, hogy könnyen alkalmazkodjon a folyamatosan változó környezethez. Szabadon hozzáadhat új metódusokat és objektumokat a könyvtárakhoz anélkül, hogy kárt okozna. A Java nyelv megkönnyíti a program előrehaladásával kapcsolatos információk megszerzését.

Ez nagyon fontos, ha kódot szeretne hozzáadni egy már futó programhoz. Ennek kiváló példája az internetről letöltött kód, amelyet a böngésző hajt végre. A Java 1.0-ban egyáltalán nem volt egyszerű információt szerezni a végrehajtó program előrehaladásáról, de a Java nyelv jelenlegi verziója feltárja a programozó számára a végrehajtó programban lévő objektumok szerkezetét és viselkedését.
Ez nagyon értékes olyan rendszerek számára, amelyeknek elemezniük kell az objektumokat a program végrehajtása során. Ezek a rendszerek GUI-eszközöket, intelligens hibakeresőket, bővítményeket és objektumadatbázisokat tartalmaznak.

Java nyelv és az internet

Az ötlet egyszerű – a felhasználók Java bájtkódokat töltenek le az internetről, és futtatják azokat a gépeiken. A webböngészőkön futó Java-programokat kisalkalmazásoknak nevezzük. Az applet használatához olyan webböngészőre van szükség, amely támogatja a Java nyelvet és képes értelmezni a bájtkódokat. A Java forráskódot a Sun licencelte, amely ragaszkodik magának a nyelvnek és az alapvető könyvtárak szerkezetének megváltoztathatatlanságához. Sajnos a valóság nem ilyen. A Netscape és az Internet Explorer böngészők különböző verziói támogatják a Java nyelv különböző verzióit, és ezek közül néhány jelentősen elavult. Ez a szerencsétlen helyzet egyre több akadályt gördít a kihasználó kisalkalmazások fejlesztésébe legújabb verzió Java nyelv. A probléma megoldására a Sun kifejlesztett egy Java beépülő modult, amely a legfejlettebb környezetet biztosítja a Netscape és Internet Explorer böngészőn alapuló Java programok futtatásához.

Egy kisalkalmazás betöltése olyan, mint egy kép beágyazása egy weboldalba. Az applet az oldal részévé válik, és a szöveg körbeveszi az általa elfoglalt helyet. A különbség azonban az, hogy a kép most él. Válaszol a felhasználói parancsokra, megváltoztatja kinézetés adatátvitelt biztosít a kisalkalmazást megtekintő számítógép és a kisalkalmazást vezérlő számítógép között.

Egy kisalkalmazás betöltése olyan, mint egy kép beszúrása egy weboldalba. Az applet az oldal részévé válik, és a szöveg körbeveszi az általa elfoglalt helyet. A helyzet az, hogy a kép "élő". Válaszol a felhasználói parancsokra, megváltoztatja a megjelenését, és adatokat továbbít a kisalkalmazást futtató számítógép és a kisalkalmazást futtató számítógép között.

ábrán Az 1.1. ábra egy jó példát mutat egy dinamikus weboldalra, amely összetett számításokat végez, és egy kisalkalmazást használ molekulák rajzolására. A molekula szerkezetének jobb megértése érdekében elforgathatja vagy nagyíthatja az egér segítségével. Az ilyen manipulációkat statikus weboldalakon nem lehet megvalósítani, de kisalkalmazások lehetővé teszik. (Ez az applet a http://jmol.sourceforge.net címen található.)

Rizs. 1.1. Jmol kisalkalmazás

A kisalkalmazások segítségével új gombokat és szövegmezőket adhatunk egy weboldalhoz. Az ilyen kisalkalmazások azonban lassan töltődnek be telefonvonalon keresztül.

Ugyanezt meg lehet tenni a dinamikus HTML-lel, a HTML formáival (Hypertext Markup Language) vagy egy olyan szkriptnyelvvel, mint a JavaScript. Természetesen az első kisalkalmazásokat animációhoz tervezték: pörgő földgömbök, táncoló rajzfilmfigurák, művészi szövegek stb. A fentiek többsége azonban animált GIF-eket is készíthet, és a dinamikus HTML szkriptekkel kombinálva sokkal többet tesz, mint a kisalkalmazások.

A böngésző inkompatibilitása és a lassú letöltési folyamat inkonzisztenciája miatt hálózati kapcsolatok A weblapokhoz tervezett kisalkalmazások nem jelentenek óriási eredményt. A helyi hálózatokban (intranetekben) teljesen más a helyzet. Általában nincsenek sávszélesség-problémák, így az applet betöltési ideje nem jelentős. A helyi hálózaton kiválaszthatja a kívánt böngészőt, vagy használhatja a Java beépülő modult. Az alkalmazottak nem helyezhetik át a hálózaton keresztül szállított programot rossz helyre, vagy nem telepíthetik megfelelően, és rendszergazda nem kell megkerülni az összes kliens gépet és frissíteni azokon a programokat. A készletkezeléshez, nyaralás tervezéshez, utazási költségtérítéshez és hasonlókhoz számos programot fejlesztett ki számos vállalat böngészők segítségével kisalkalmazások formájában.

Amíg ezt a könyvet írtuk, az inga visszafordult a kliensoldali programozásról a szerveroldali programozásra. Különösen az alkalmazáskiszolgálók használhatják a megfigyelési képességeket Virtuális gép Java automatikus terheléselosztáshoz, adatbázishivatkozás-készletezéshez, objektumszinkronizáláshoz, biztonságos leállításhoz és újratöltéshez, valamint a méretezhető szerveralkalmazásokhoz szükséges egyéb folyamatokhoz, amelyeket szinte lehetetlen megfelelően megvalósítani. Így az alkalmazásokat létrehozó programozóknak lehetőségük van megvásárolni ezeket az összetett mechanizmusokat, ahelyett, hogy maguk fejlesztenék őket. Ez növelte a programozók termelékenységét – programjaik logikájára koncentráltak, nem terelték el figyelmüket a szerverek működésével kapcsolatos részletek.

A Java a Sun microsystems programozási nyelve. Eredetileg programozási nyelvként fejlesztették ki elektronikus eszközök, de később szerverszoftver-alkalmazások írására is használták. A Java programok többplatformosak, azaz bármilyen operációs rendszeren futhatnak.

A Java programozás alapjai

A Java, mint objektum-orientált nyelv, az OOP alapelveit követi:

  • öröklés;
  • polimorfizmus;
  • Egységbezárás.

A "Java" közepén, mint más OOP-okban, van egy objektum és egy osztály konstruktorokkal és tulajdonságokkal. A Java programozási nyelv tanulását jobb nem hivatalos forrásokból, hanem kezdőknek szóló kézikönyvekből kezdeni. Az ilyen kézikönyvekben a funkciók részletes leírása, kódpéldák találhatók. Az olyan könyvek, mint a The Java Programming Language for Beginners, részletesen ismertetik a nevezett nyelv alapelveit és jellemzőit.

Sajátosságok

A Java programozási nyelv kódját bájtkódra fordítják, majd a JVM virtuális gépen végrehajtják. A bájtkódra átalakítás Javac, Jikes, Espresso, GCJ nyelven történik. Vannak olyan fordítók, amelyek a C nyelvet Java bájtkódra fordítják. Így egy C alkalmazás bármilyen platformon futhat.

A "Java" szintaxist a következők jellemzik:

  1. Az osztályneveknek nagybetűvel kell kezdődniük. Ha a név több szóból áll, akkor a másodiknak nagybetűvel kell kezdődnie.
  2. Ha több szót használnak a módszer kialakításához, akkor a másodiknak nagybetűvel kell kezdődnie.
  3. A feldolgozás a main() metódussal kezdődik – ez minden program része.

Típusok

A Java programozási nyelvnek 8 primitív típusa van. Az alábbiakban bemutatjuk őket.

  • A Boolean egy logikai típus, amely csak két igaz és hamis értéket vesz fel.
  • A byte a legkisebb egész szám típusa, amelynek mérete 1 bájt. Fájlokkal vagy nyers bináris adatokkal való munka során használatos. -128 és 127 között van.
  • A Short tartománya -32768 és 32767 között van, és a számok ábrázolására szolgál. Az ilyen típusú változók mérete 2 bájt.
  • Az Int számokat is jelent, de mérete 4 bájt. Leggyakrabban egész számokkal való munkára használják, és a bájtokat és a shortokat néha int-vé léptetik elő.
  • A hosszú nagy egész számokhoz használatos. A lehetséges értékek -9223372036854775808 és 9223372036854775807 között mozognak.
  • A float és a double a törtek jelölésére szolgál. Különbségük az, hogy az úszó akkor kényelmes, ha nincs szükség nagy pontosságra a szám törtrészében.
  • A Double megjeleníti az összes karaktert a „.” határoló után, a float pedig csak az elsőt.
  • A karakterlánc a leggyakrabban használt primitív típus, amellyel karakterláncokat határozhatunk meg.

Osztályok és tárgyak

Az osztályok és az objektumok fontos szerepet játszanak a Java programozási nyelv tanulásában kezdőknek.

Egy osztály definiál egy sablont egy objektumhoz, annak attribútumokkal és metódusokkal kell rendelkeznie. Létrehozásához használja a Class kulcsszót. Ha külön fájlban jön létre, akkor az osztály és a fájl nevének meg kell egyeznie. Maga a név két részből áll: névből és kiterjesztésből.Java.

A Java-ban létrehozhat egy alosztályt, amely örökli a szülő metódusait. Erre az extends szót használjuk:

  • osztály osztálynév kiterjeszti szuperosztálynév();

A konstruktor bármely osztály tagja, még akkor is, ha nincs kifejezetten beállítva. Ebben az esetben a fordító önállóan hozza létre:

  • public class Osztály( public Class()( ) public Class(String name)( ))

A konstruktor neve megegyezik az osztály nevével, alapértelmezés szerint csak egy paramétere van:

  • nyilvános kiskutya (karakterlánc neve)

Egy objektum jön létre egy osztályból a new() operátor használatával:

  • p pont = új pont()

Megkapja az osztály összes metódusát és tulajdonságát, amelyek segítségével interakcióba lép más objektumokkal. Egy objektum többször is használható különböző változók alatt.

    p pont = új pont()

    osztály TwoPoints(

    public static void main(String args) (

    Pont p1 = new Pont();

    Pont p2 = new Pont();

    Az objektumváltozók és az objektumok teljesen különböző entitások. Az objektumváltozók hivatkozások. Bármely nem primitív típusú változóra mutathatnak. A C++-tól eltérően típusátalakításuk szigorúan szabályozott.

    Mezők és módszerek

    A mezők mind olyan változók, amelyek egy osztályhoz vagy objektumhoz vannak társítva. Alapértelmezés szerint helyiek, és nem használhatók más osztályokban. A "." operátor a következő mezők elérésére szolgál:

    • osztálynév változó

    Statikus mezőket a static kulcsszóval adhat meg. Az ilyen mezők az egyetlen mód a globális változók tárolására. Ez annak a ténynek köszönhető, hogy a Java-ban egyszerűen nincsenek globális változók.

    Megvalósította a változók importálásának lehetőségét, hogy más csomagokból hozzáférhessen:

    • statikus osztálynév importálása;

    A metódus egy szubrutin azoknak az osztályoknak, amelyekben deklarálva van. A változókkal azonos szinten van leírva. Funkcióként van megadva, és bármilyen típusú lehet, beleértve az ürességet is:

    • osztály Pont ( int x, y;

      void init(int a, int b) (

    A fenti példában a Point osztálynak van egy x és y egész szám, egy init() metódus. A metódusokhoz, akárcsak a változókhoz, a "." operátor segítségével lehet hozzáférni:

    • point.init();

    Az init tulajdonság nem ad vissza semmit, tehát érvénytelen típusú.

    Változók

    A Java programozási nyelv oktatóanyagában a változók külön helyet foglalnak el. Minden változónak van egy meghatározott típusa, ez határozza meg az értékek tárolásának szükséges helyét, a lehetséges értékek tartományát, a műveletek listáját. Az értékek manipulálása előtt a változókat deklarálják.

    Egyszerre több változó is deklarálható. Ezek felsorolásához vesszőt használnak:

    • int a, b, c;

    Az inicializálás a nyilatkozat után vagy közben történik:

    int a = 10, b = 10;

    Több típusa van:

    • helyi változók (helyi);
    • példányváltozók (példányváltozók);
    • statikus változók (static).

    A lokális változókat metódusokban és konstruktorokban deklarálják, ez utóbbiak indításakor hozzák létre, majd a befejezést követően megsemmisülnek. Számukra tilos hozzáférés-módosítókat megadni és az akadálymentesítés szintjét szabályozni. Nem láthatók a deklarált blokkon kívül. Java-ban a változóknak nincs kezdeti értéke, ezért az első használat előtt hozzá kell rendelni egyet.

    A példányváltozókat az osztályon belül kell deklarálni. Metódusként használatosak, de csak az objektum létrehozása után érhetők el. A változó megsemmisül, amikor az objektum megsemmisül. A példányváltozóknak a helyi változókkal ellentétben alapértelmezett értékeik vannak:

    • számok - 0;
    • logika – hamis;
    • a hivatkozások nullák.

    A statikus változókat osztályváltozóknak nevezzük. A nevük nagybetűvel kezdődik, és a statikus módosítóval van megadva. Konstansként használatosak, a listából egy specifikátor hozzáadódik hozzájuk:

    • végső;
    • magán;
    • nyilvános.

    Futtassa a program elején, a végrehajtás leállása után megsemmisül. Csakúgy, mint a példányváltozóknak, alapértelmezett értékeik vannak, amelyek üres változókhoz vannak hozzárendelve. A számok értéke 0, a logikai értékek false, az objektumhivatkozások kezdetben nullák. A statikus változókat a következő formában hívjuk:

    • Osztálynév.Változónév.

    Szemetes

    A Java programozási nyelv kezdőknek bemutatójában az automatikus szemétgyűjtő rész a legérdekesebb.

    Java-ban a C nyelvvel ellentétben ez nem lehetséges kézi eltávolítás tárgy az emlékezetből. Ehhez egy automatikus törlési módszert alkalmaznak - a szemétgyűjtőt. A hagyományos nullán keresztüli törléssel csak az objektumra való hivatkozás törlődik, és maga az objektum törlődik. Vannak módszerek a kényszeres szemétszállításra, bár normál használatra nem ajánlottak.

    A nem használt objektumok automatikus törlésére szolgáló modul a háttérben fut, és akkor indul el, ha a program inaktív. Az objektumok memóriából való törléséhez a program leáll, a memória felszabadítása után a megszakított művelet folytatódik.

    Módosítók

    Megkülönböztetni különböző típusok módosítók. A hozzáférési módot meghatározóakon kívül vannak módosítók a metódusokhoz, változókhoz és egy osztályhoz. A privátnak nyilvánított metódusok csak a deklarált osztályban érhetők el. Az ilyen változók nem használhatók más osztályokban és függvényekben. A nyilvános hozzáférést biztosít bármely osztályhoz. Ha nyilvános osztályt kell szereznie egy másik csomagból, akkor először importálnia kell azt.

    A védett módosító működésében hasonló a publikushoz – hozzáférést nyit az osztálymezőkhöz. Mindkét esetben a változók más osztályokban is használhatók. De a nyilvános módosító abszolút mindenki számára elérhető, a védett módosító pedig csak az örökölt osztályok számára.

    A metódusok létrehozásakor alkalmazott módosító statikus. Ez azt jelenti, hogy a generált metódus az osztály példányaitól függetlenül létezik. A Végső módosító nem szabályozza a hozzáférést, hanem jelzi az objektum értékeinek további manipulálásának lehetetlenségét. Megtiltja annak az elemnek a megváltoztatását, amelyhez meg van adva.

    A mezők végleges értéke lehetetlenné teszi a változó első értékének megváltoztatását:

      public static void mthod(String args) (

      végleges int Név = 1;

      int Név = 2;// hibát jelez

    A végső módosítóval rendelkező változók konstansok. Általában csak nagybetűvel írják őket. A CamelStyle és más módszerek nem működnek.

    A metódusok végleges értéke egy örökölt osztályban lévő metódus megváltoztatásának tilalmát jelzi:

      final void myMethod() (

      System.out.printIn("Hello world");

    Az osztályok véglegese azt jelenti, hogy nem hozhat létre osztály leszármazottait:

      utolsó nyilvános osztály osztály(

    Abstract - módosító absztrakt osztályok létrehozásához. Bármely absztrakt osztályt és absztrakt metódust tovább kívánunk bővíteni más osztályokban és blokkokban. Módosító tranziens azt mondja a virtuális gépnek, hogy ne dolgozza fel az adott változót. Ebben az esetben egyszerűen nem menthető. Például a tranziens int Név = 100 nem marad fenn, de az int b igen.

    Platformok és verziók

    Meglévő Java programozási nyelvcsaládok:

    • standard kiadás.
    • Enterprise Edition.
    • Micro Edition.
    • kártya.

    1. SE - a fő, széles körben használják egyedi alkalmazások létrehozására egyéni használatra.
    2. Az EE a vállalati szoftverfejlesztés specifikációinak halmaza. Több funkciót tartalmaz, mint az SE, ezért kereskedelmi méretekben használják a nagy- és középvállalkozásokban.
    3. ME - korlátozott teljesítményű és memóriájú eszközökhöz tervezték, általában kicsi a kijelző mérete. Ilyen eszközök az okostelefonok és PDA-k, vevőkészülékek digitális televíziózás.
    4. Kártya – rendkívül korlátozott számítási erőforrásokkal rendelkező eszközökhöz, például intelligens kártyákhoz, SIM-kártyákhoz, ATM-ekhez tervezve. Ebből a célból megváltozott a bájtkód, a platform követelményei és a könyvtárak összetevői.

    Alkalmazás

    A Java programozási nyelvű programok általában lassabbak és többet vesznek igénybe véletlen hozzáférésű memória. A Java és a C nyelvek összehasonlító elemzése azt mutatta, hogy a C egy kicsit produktívabb. A Java virtuális gép számos változtatása és optimalizálása után javult a teljesítménye.

    Aktívan használják Android alkalmazásokhoz. A programot egy nem szabványos bájtkódba fordítják, és az ART virtuális gépen hajtják végre. Az összeállításhoz Android Studio használható. Ez a Google IDE a hivatalos Android fejlesztői IDE.

    A Microsoft kifejlesztette a Java Virtual Machine MSJVM saját megvalósítását. Olyan különbségek voltak benne, amelyek megtörték a cross-platform alapvető koncepcióját - egyes technológiák és módszerek nem támogatottak, voltak nem szabványos kiterjesztések, amelyek csak a Windows platformon működtek. A Microsoft kiadta a J# nyelvet, amelynek szintaxisa és általános működése nagyon hasonlít a Java-hoz. Nem felelt meg a hivatalos specifikációnak, és végül eltávolították a Microsoft Visual Studio szabványos fejlesztői eszközkészletéből.

    Java programozási nyelv és környezet

    A szoftverfejlesztés a következő IDE-kben történik:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ ÖTLET.
    4. jDeveloper.
    5. Java iOS-hez.
    6. Geany.

    A JDK-t az Oracle Java fejlesztőkészletként terjeszti. Tartalmazza a fordítót, a szabványos könyvtárakat, a segédprogramokat és a végrehajtó rendszert. A modern integrált fejlesztői környezetek a JDK-ra támaszkodnak.

    Kényelmes kódot írni a Java programozási nyelven a Netbeansben és az Eclipse IDE-ben. Ezek ingyenes integrált fejlesztői környezetek, minden Java platformra alkalmasak. Python, PHP, JavaScript, C++ programozáshoz is használható.

    A Jetbrains IntelliJ IDE-je két változatban kerül terjesztésre: ingyenes és kereskedelmi. Támogatja a kódírást számos programozási nyelven, vannak harmadik féltől származó bővítmények a fejlesztőktől, amelyek még több PL-t valósítanak meg.

    A JDeveloper egy másik fejlesztés az Oracle-től. Teljesen Java nyelven íródott, így minden operációs rendszeren működik.

Bevezetés

Ezt a munkát napjaink egyik legígéretesebb programozási nyelvének - a Java nyelvnek - szentelték. A "Java" nevű technológia túlzás nélkül forradalminak mondható a szoftverfejlesztő iparban.

A rendezés más programozási nyelveken is megvalósítható, például PHP, C++ stb. Csak sokkal jövedelmezőbb a Java-ban. A részleteket alább tárgyaljuk. Az újdonság abban rejlik, hogy ezen a nyelven és ebben az értelmezésben korábban nem valósítottak meg válogatóprogramot.

A feladat megvalósításához egy programírási algoritmust javasoltak. Továbbá ezt az algoritmust Java-ban implementálták.

A Java programozási nyelv leírása

A Java általános jellemzői

A szortírozó program írásához a Java nyelvet választottuk. A Java a Sun Microsystems által 1991 óta fejlesztett objektum-orientált programozási nyelv, amelyet hivatalosan 1995. május 23-án adtak ki. Kezdetben az új programozási nyelvet Oak-nak (James Gosling) hívták, és szórakoztató elektronikai cikkekhez fejlesztették ki, de később Java névre keresztelték, és kisalkalmazások, alkalmazások és szerverszoftverek írására kezdték használni.

A Java programozási nyelv nem hasonlít a létező többihez. Úgy tervezték, hogy megkönnyítse a munkavégzést a WWW-ben lévő számítógépeken böngészőkön keresztül. Manapság minden számítógépen van böngésző. Viszont minden böngésző támogatja a Java-t. Ez azt jelenti, hogy megtekintheti a világszerte tárolt dokumentumokat, és egy hivatkozásra kattintva aktiválhat egy Java programot, amely a hálózaton keresztül továbbítódik és fut a számítógépén.

A Java nyelv egyik fő előnye, hogy független attól a platformtól és számítógéptípustól, amelyen a programok futnak. Így ugyanaz a kód futtatható Windows, Linux, FreeBSD, Solaris, Apple Mac stb. operációs rendszereken. Ez nagyon fontossá válik, amikor a programokat a globális internetről töltik le, és különféle platformokon használják. A Java programozási nyelv nemcsak statikus szövegekkel és grafikákkal tud dolgozni, hanem különféle dinamikus objektumokkal is.

A Java másik hasonlóan fontos előnye a C++ programozási nyelvvel való nagy hasonlósága. Ezért azoknak a programozóknak, akik ismerik a C és C ++ szintaxisát, könnyű lesz megtanulni a Java-t.

Ezenkívül a Java egy teljesen objektum-orientált nyelv, még inkább, mint a C++. A Java nyelv összes entitása objektum, kivéve néhány primitív típust, például számokat.

Az is fontos, hogy Java-ban sokkal könnyebb olyan programokat fejleszteni, amelyek nem tartalmaznak hibát, mint C ++-ban.

A helyzet az, hogy a Sun cég Java nyelvének fejlesztői a C ++ nyelvű programok alapvető elemzését végezték el. Elemezték a forráskód "szűk keresztmetszeteit", amelyek nehezen észlelhető hibák megjelenéséhez vezetnek. Ezért az a döntés született, hogy a Java nyelvet úgy tervezik meg, hogy olyan programokat készítsenek, amelyek elrejtik a leggyakoribb hibákat.

Ennek érdekében a következőket tették:

a fejlesztők megszüntették a memória kifejezett lefoglalásának és felszabadításának lehetőségét.

Például a Java memóriája a szemétgyűjtés révén automatikusan felszabadul. Kiderült, hogy a programozó biztosított a memória nem megfelelő használatából eredő hibák ellen.

valódi tömbök bevezetése és a mutatók betiltása.

Mostantól a programozók nem tudnak adatokat törölni a memóriából a mutatók helytelen használata miatt.

kizárták a hozzárendelési operátor és az egyenlőség összehasonlító operátorának összetévesztésének lehetőségét. Általános szabály, hogy a "=" jel problémája nagyon gyakran logikai hibákhoz vezet a C és C ++ nyelvekben, amelyeket nem olyan könnyű észlelni. Főleg nagy programokban.

többszörös öröklődés teljesen kizárt. Ezt egy új koncepció váltotta fel - egy interfész, amelynek ötletét az Objective C nyelvből kölcsönözték.

Egy interfész szinte mindent megad a programozónak, amit a programozó többszörös öröklődésből nyerhet, miközben elkerüli az osztályhierarchiák kezelésével járó bonyolultságokat.

A legújabb kiadás az 1.6-os verzió, amely javította a biztonságot, továbbfejlesztette a Mozilla Rhino szkriptnyelv támogatását, továbbfejlesztette az asztali integrációt, és néhány új funkcióval bővítette a grafikus felületek létrehozását.

Java és Microsoft

A következő cégek elsősorban a Java (J2EE) technológiákra koncentrálnak a .NET helyett, bár ez utóbbival is foglalkoznak: IBM, Oracle. Az Oracle DBMS komponensként tartalmaz egy JVM-et, amely lehetővé teszi a DBMS közvetlen programozását Java nyelven, beleértve például a tárolt eljárásokat.

Főbb jellemzők

Program példa

Program, amely kiírja a "Hello, World!"

Nyilvános osztály HelloWorld ( public static void main(String args) ( System .out .println ("Hello, World!") ; ) )

Példa a sablonok használatára:

Java.util.* importálása; public class Minta ( public static void main(String args) ( // Objektum létrehozása sablonból. Lista strings = új LinkedList () ; strings.add("Helló" ) ; strings.add("világ" ) ; strings.add("!"); for (String s: strings) ( System .out .print (s) ; System .out .print (" " ) ; ) ) )

Kulcs ötletek

Primitív típusok

A Java nyelvben csak 8 skalártípus létezik: logikai, bájt, char, short, int, long, float, double.

Burkolat osztályok primitív típusokhoz

A primitív típusok hosszát és értéktartományát a szabvány határozza meg, és nem a megvalósítás, és a táblázatban találhatók. A char típust a lokalizáció kényelme érdekében kétbájtosra tették (a Java egyik ideológiai alapelve): a szabvány megalkotásakor a Unicode-16 már létezett, de a Unicode-32 nem. Mivel az eredményben nem maradt egybájtos típus, egy új bájttípus került hozzáadásra. A float és double típusok speciális értékekkel rendelkezhetnek, és "nem számok" (

típus Hossz (bájtban) Értéktartomány vagy értékkészlet
logikai érték meghatározatlan igaz hamis
byte 1 −128..127
char 2 0..2 16 -1 vagy 0..65535
rövid 2 −2 15 ..2 15 -1 vagy −32768..32767
int 4 −2 31 ..2 31 -1 vagy −2147483648..2147483647
hosszú 8 −2 63 ..2 63 -1, vagy körülbelül −9,2 10 18 ..9,2 10 18
úszó 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127 , vagy körülbelül -3,4 10 38 ..3,4 10 38 , valamint , , NaN
kettős 8 -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 vagy körülbelül -1,8 10 308 ..1,8 10 308, valamint , , NaN

Ilyen merev szabványosításra volt szükség ahhoz, hogy a nyelv platformfüggetlen legyen, ami a Java egyik ideológiai követelménye és sikerének egyik oka. Mindazonáltal a platformfüggetlenséggel kapcsolatban maradt egy kis probléma. Egyes processzorok 10 bájtos regisztereket használnak az eredmények közbenső tárolására, vagy más módon javítják a számítások pontosságát. Annak érdekében, hogy a Java a lehető legjobban átjárható legyen a különböző rendszerek között, a korai verziókban tilos volt a számítások pontosságának javítása. Ez azonban lassabb teljesítményt eredményezett. Kiderült, hogy a platformfüggetlenség érdekében keveseknek kell a pontosság romlása, főleg, ha a programok munkájának lelassításával kell fizetni érte. Számos tiltakozás után ezt a tiltást eltávolították, de hozzáadták a strictfp kulcsszót a precíziós javítás letiltásához.

Transzformációk a matematikai műveletekben

A Java nyelv a következő szabályokkal rendelkezik:

  1. Ha az egyik operandus double típusú, akkor a másik is double típusúvá alakul.
  2. Ellenkező esetben, ha az egyik operandus float típusú, akkor a másik is float típusú lesz.
  3. Ellenkező esetben, ha az egyik operandus hosszú típusú, a másik is long típusúvá alakul.
  4. Ellenkező esetben mindkét operandus int típusúra konvertálódik.

Az utolsó szabály megkülönbözteti a Java-t a régebbi megvalósításoktól és a C++-tól, és biztonságosabbá teszi a kódot. Így például a Java nyelvben, a kód végrehajtása után

Rövid x = 50, y = 1000; int z = x*y;

a z változóhoz 50000 van hozzárendelve, nem -15536, mint a legtöbb reménytelenül elavult C és C++ implementációban. Az MS VC++ 7-es verziója óta, valamint sok más modern fordító (gcc , Intel C++, Borland C++, Comeau stb.) által fordított programban is 50000 lesz az érték.

Objektumváltozók, objektumok, hivatkozások és mutatók

A Java nyelv csak dinamikusan létrehozott objektumokat tartalmaz. Ezenkívül a Java objektumtípusú változói és objektumai teljesen különböző entitások. Az objektum típusú változók hivatkozások, azaz implicit mutatók dinamikusan létrehozott objektumokra. Ezt hangsúlyozza a változók deklarációjának szintaxisa. Például Java nyelven nem írható:

Dupla a[ 10 ] [ 20 ] ; Foo b(30) ;

Double a = új kettős [ 10 ] [ 20 ] ; Foo b = új Foo(30 ) ;

A hozzárendelések, a szubrutinoknak való átadás és az összehasonlítások során az objektumváltozók mutatóként viselkednek, vagyis az objektumok címeit hozzárendeli, másolja és összehasonlítja. És amikor egy objektum adatmezőihez vagy metódusaihoz objektumváltozóval fér hozzá, nincs szükség különleges hivatkozási műveletekre – ez a hozzáférés úgy történik, mintha az objektumváltozó maga lenne az objektum.

Az objektumváltozók bármilyen típusú változók, kivéve az egyszerű numerikus típusokat. A Java-ban nincsenek kifejezett mutatók. A C, C++ és más programozási nyelvek mutatóitól eltérően a Java hivatkozások rendkívül biztonságosak a használatukra vonatkozó szigorú korlátozások miatt, különösen:

  • Az int vagy bármely más primitív típusú objektum nem konvertálható mutatóvá vagy hivatkozássá, és fordítva.
  • Tilos a ++, −−, +, − vagy bármely más aritmetikai művelet végrehajtása linkeken.
  • A referenciák közötti típuskonverzió szigorúan szabályozott. A tömbhivatkozások kivételével csak egy örökölt típus és leszármazottja közötti hivatkozások konvertálása megengedett, az örökölt típusról az öröklődő típusra való átalakítást pedig kifejezetten meg kell adni, és futás közben ellenőrizni kell az értelmességét. A tömbreferencia-konverziók csak akkor engedélyezettek, ha az alaptípusuk konverziói engedélyezettek, és nincs dimenzióütközés.
  • A Java nyelven nincsenek címvételi (&) vagy címvételi (*) műveletek. A csillag Java nyelven szorzást jelent, ez minden. Az és (&) csak azt jelenti, hogy "bitenként és" (a kettős "és" a "logikai és").

A Java-ban ilyen speciálisan bevezetett korlátozások miatt a fizikai címek szintjén a közvetlen memóriamanipuláció lehetetlen (bár vannak olyan hivatkozások, amelyek semmire nem mutatnak: az ilyen hivatkozás értékét nullával jelöljük).

Duplikált hivatkozások és klónozás

Mivel az objektumváltozók referenciaváltozók, a hozzárendelés nem másolja az objektumot. Szóval ha írsz

Foo foo, bár; ... bár = foo;

akkor a cím a foo-ból a bar-ba lesz másolva. Vagyis a foo és a bar ugyanarra a memóriaterületre, azaz ugyanarra az objektumra fog mutatni; ha megpróbálja megváltoztatni a foo által hivatkozott objektum mezőit, akkor a bar által hivatkozott objektum megváltozik, és fordítva. Ha csak még egyet kell szereznie másolat forrásobjektum, használja a clone() metódust (C++ terminológiában tagfüggvény), amely másolatot készít az objektumról, vagy egy másolatkonstruktort.

A clone() metódus megköveteli, hogy az osztály megvalósítsa a klónozható interfészt (az interfészekért lásd alább). Ha egy osztály megvalósítja a klónozható felületet, akkor a clone() alapértelmezés szerint az összes mezőt ( kis példány). Ha másolás helyett klónozni szeretne mezőket (valamint azok mezőit és így tovább), felül kell írnia a clone() metódust. A clone() metódus meghatározása és használata gyakran nem triviális feladat.

Szemétgyüjtés

A Java nyelvben nem lehetséges explicit módon eltávolítani egy objektumot a memóriából – helyette a szemétgyűjtés valósul meg. A hagyományos trükk a szemétgyűjtőnek a memória felszabadítására "tipp" adni az, hogy egy változót null értékre állítanak. Ez azonban nem jelenti azt, hogy az objektum kicserélődött nulla, minden bizonnyal és azonnal törlésre kerül. Ez a technika csak az objektumra való hivatkozást távolítja el, azaz leválasztja a mutatót a memóriában lévő objektumról. Ebben az esetben figyelembe kell venni, hogy az objektumot a szemétgyűjtő nem törli mindaddig, amíg a használt változókból vagy objektumokból legalább egy hivatkozás rá mutat. Léteznek módszerek a kényszeres szemétszállítás kezdeményezésére is, de ezeket nem garantáltan hívja a futtatókörnyezet, és normál használatra sem ajánlott.

Osztályok és funkciók

A Java nem procedurális nyelv: bármely függvény csak egy osztályon belül létezhet. Ezt hangsúlyozza a Java nyelv terminológiája, ahol nincs „funkció” vagy „tagfüggvény” fogalma (Eng. tag funkció), de csak módszer. A standard függvények is metódusokká váltak. Például a Java-ban nincs sin() függvény, viszont van a Math osztály Math.sin() metódusa (amely a sin() mellett tartalmazza a cos() , exp() , sqrt() függvényt is. , abs() és sok más módszer).

Statikus módszerek és mezők

Annak érdekében, hogy ne hozzon létre egy objektumot a Math osztályból (és más hasonló osztályokból) minden alkalommal, amikor sin () (és más hasonló függvényeket) kell meghívnia, a fogalom statikus módszerek(Angol) statikus módszer; néha oroszul statikusnak nevezik). Egy statikus metódus (amely a leírásban a static kulcsszóval van jelölve) anélkül hívható meg, hogy az osztályába tartozó objektumot létrehoznánk. Ezért lehet írni

Double x = Math .sin(1) ;

Math m = new Math(); double x = m.sin(1) ;

A statikus metódusokra vonatkozó korlátozás az, hogy csak az objektum statikus mezőihez és metódusaihoz férhetnek hozzá.

A statikus mezők jelentése ugyanaz, mint a C++-ban: mindegyikből csak egy példány létezik.

Véglegesség

A végső kulcsszó különböző dolgokat jelent egy változó, metódus vagy osztály leírásakor. A végső változó (konstans néven) a deklaráláskor inicializálódik, és nem módosítható tovább. A végső módszert nem lehet örökléssel felülírni. A végső osztálynak egyáltalán nem lehetnek örökösei.

Absztrakció

A Java-ban a nem kifejezetten véglegesnek vagy privátnak deklarált metódusok a C++ terminológiában virtuálisak: az alap- és az öröklődő osztályokban eltérő módon definiált metódusok meghívása mindig futásidejű ellenőrzéssel jár.

A Java absztrakt metódusa (absztrakt leíró) olyan metódus, amelyhez paraméterek és visszatérési típusok vannak megadva, de törzs nem. Az absztrakt metódusokat származtatott osztályokban határozzák meg. A C++-ban ugyanezt hívják tiszta virtuális függvénynek. Ahhoz, hogy egy osztály le tudjon írni absztrakt metódusokat, magát az osztályt is absztraktnak kell nyilvánítani. Absztrakt osztályobjektumok nem hozhatók létre.

Interfészek

A Java legmagasabb absztrakciós foka az interfész. Minden interfész metódus absztrakt: az absztrakt leíró nem is szükséges. Az interfész nem osztály. Egy osztály örökölhet, ill kiterjed(kiterjeszt) egy másik osztályt, ill végrehajtani(megvalósítja) interfész. Ezenkívül egy interfész örökölhet vagy kiterjeszthet egy másik interfészt.

Java nyelven egy osztály nem örökölhet több osztályt, de tetszőleges számú interfészt képes megvalósítani.

Az interfészek paraméterként átadhatók a metódusoknak, de típusuk objektumai nem hozhatók létre.

Marker interfészek

A Java-ban vannak olyan interfészek, amelyek nem tartalmaznak megvalósítandó metódusokat, de a JVM speciális módon kezeli őket. Ezek az interfészek:

  • java.lang.Klónozható
  • java.io.Serializálható
  • java.rmi.Remote

Javasablonok (általános)

A Java 5-től kezdve a nyelvnek van egy általános programozási mechanizmusa - olyan sablonok, amelyek külsőleg közel állnak a C++ sablonokhoz. Az osztályok és metódusok leírásában egy speciális szintaxis segítségével megadhat típusparamétereket, amelyek a leíráson belül használhatók mezőtípusokként, paraméterekként és metódusok visszatérési értékeként.

// Általános osztálydeklaráció osztály GenericClass ( E getFirst() ( ... ) void add(E obj) ( ... ) ) // Általános osztály használata a kódban GenericClass var = new GenericClass () ; var.add("qwerty") ; String p = var.getFirst();

Az osztályok, interfészek és metódusok általános deklarációja megengedett. Ezenkívül a szintaxis támogatja a paramétertípusok korlátozott deklarációit: az űrlap szerkezetének deklarációjában található jelzés megköveteli a T típusú paramétert az A, B, C és így tovább interfészek és a konstrukció megvalósításához megköveteli, hogy a T típusparaméter C típusú legyen vagy annak egyik őse.

A C#-sablonokkal ellentétben a Java-sablonokat a futási környezet nem támogatja - a fordító egyszerűen olyan bájtkódot hoz létre, amely nem tartalmaz sablonokat. A sablonok Java-ban való megvalósítása alapvetően különbözik a hasonló mechanizmusok C ++-ban való megvalósításától: a fordító nem generál egy-egy osztály- vagy sablonmetódus külön változatát minden egyes sablonhasználati esethez, hanem egyszerűen egyetlen bájtkódos implementációt hoz létre, amely tartalmazza a szükséges típusellenőrzések és átalakítások. Ez számos korlátozáshoz vezet a sablonok Java programokban való használatára vonatkozóan.

Osztálytagsági ellenőrzés

Java nyelven kifejezetten ellenőrizheti, hogy egy objektum melyik osztályba tartozik. A Foo foo példánya akkor igaz, ha a foo objektum a Foo osztályhoz vagy annak leszármazottjához tartozik, vagy megvalósítja a Foo interfészt (vagy általánosabban örököl egy osztályt, amely olyan interfészt valósít meg, amelyet Foo örököl).

Ezután az összes objektumhoz definiált getClass() függvény egy Class típusú objektumot ad vissza. Ezeket a tárgyakat össze lehet hasonlítani. Így például a foo.getClass()==bar.getClass() akkor lesz igaz, ha a foo és a bar objektumok pontosan ugyanabba az osztályba tartoznak (de ez nem jelenti azt, hogy két azonos objektumról van szó).

Ezenkívül bármilyen típusú Class típusú objektum is beszerezhető így: Integer.class , Object.class .

Az osztályok közvetlen összehasonlítása azonban nem mindig a legjobb módszer az osztálytagság ellenőrzésére. Gyakran az isAssignableFrom() függvényt használják helyette. Ez a függvény egy Class típusú objektumon van definiálva, és egy Class típusú objektumot vesz paraméterként. Így a Foo.class.isAssignableFrom(Bar.class) hívása igaz értéket ad vissza, ha Foo a Bar osztály őse. Mivel minden objektum az Object típus leszármazottja, az Object.class.isAssignableFrom() hívása mindig true értéket ad vissza. A Class típusú objektum említett függvényeivel együtt az isInstance() (egyenértékű az instanceof-val) és a cast() (egy paramétert a kiválasztott osztály objektumává alakít) függvények is használatosak.

Osztálykönyvtárak

Szoftverfejlesztő eszközök

  • JDK - a Java SE és Java EE platformokhoz tartozó könyvtárak mellett egy fordítót is tartalmaz parancs sor javac és egy sor segédprogram, amelyek parancssori módban is működnek.
  • A NetBeans IDE egy ingyenes IDE minden Java platformhoz – Java ME, Java SE és Java EE. A Sun Microsystems, a Java fejlesztője a Java és más nyelvek (C++, Fortran stb.) szoftverfejlesztés alapjaként.
  • Java SE és Java EE. Folyamatban van a Java ME platform támogatása az Eclipse-ben. C, C++, Fortran stb.
  • Az IntelliJ IDEA egy kereskedelmi fejlesztőkörnyezet a Java SE, Java EE és Java ME platformokhoz.

Megjegyzések

  1. java (angol) . Merriam-Webster online szótár. Merriam Webster. - A "Java" szó angol kiejtése. Letöltve: 2009. június 5.
  2. Robert Tolksdorf. Programozási nyelvek a Java Virtual Machine JVM-hez. a research GmbH. - Alternatív nyelvek és nyelvi bővítmények online katalógusa a JVM számára. Letöltve: 2009. június 5.
  3. Microsoft Java virtuális gép támogatás. Microsoft (2003-09-12). - A Microsoft hivatalos nyilatkozata az MSJVM támogatási programról. Letöltve: 2009. június 5.
  4. Todd Hoff Amazon Architecture (angol) (2007-09-18). - Beszélgetés az Amazon architektúráról Java technológiák használatával. Letöltve: 2009. június 6.
  5. Amazon Elastic Compute Cloud (Amazon EC2). Amazon Web Services LLC. - Az Amazon EC2, mint webszolgáltatás technológiájának és képességeinek leírása. Letöltve: 2009. június 6.
  6. Todd Hoff eBay Architecture (angol) (2008-05-27). - Beszélgetés az eBay architektúrájáról a Java platformon. Letöltve: 2009. június 6.
  7. Randy Shoup, Dan Pritchett Az eBay architektúrája (angol) (PDF). SD fórum 2006(2006-11-29). - Előadás az eBay architektúra fejlődésének történetéről. Letöltve: 2009. június 6.
  8. Allen Stern Exkluzív interjú a Yandex műszaki igazgatójával, Ilya Segalovich (angol) . CenterNetworks (2008-01-14). - Interjú Ilya Segalovich Yandex műszaki igazgatójával. Letöltve: 2009. június 6.
  9. Anatolij Orlov Yandex.Search architektúra (orosz) (PowerPoint). A JUG jekatyerinburgi ülésének anyagai(2008-05-24). Letöltve: 2009. június 6.
  10. Brian Guan A LinkedIn blog. Blog archívum. Grálok a LinkedInnél. (Angol) . LinkedIn.com (2008-06-11). - A Grails Java technológián alapuló LinkedIn rendszer létrejöttének története. Letöltve: 2009. június 5.
  11. OracleJVM és Java tárolt eljárások. Oracle Inc. – Az Oracle portálnak az Oracle DBMS szerver részeként a Java technológiáknak szentelt része. Letöltve: 2009. június 5.
  12. Hivatkozás az Object.clone() metódus dokumentációjához

Irodalom

  • Monakhov Vadim A Java programozási nyelv és a NetBeans környezet, 2. kiadás. - Szentpétervár .: "BHV-Petersburg", 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • Joshua Bloch. Jáva. Hatékony programozás = Hatékony Java. - M .: "Lori", 2002. - S. 224. - ISBN 5-85582-169-2
  • Java 2. Professional's Library, Volume 1. Fundamentals = Core Java™ 2, Volume I - Fundamentals. - 7. kiadás - M .: "Williams", 2007. - S. 896. - ISBN 0-13-148202-5
  • Kay S. Horstmann, Gary Cornell. Java 2. A szakemberek könyvtára, 2. kötet. Programozási tippek = Core Java™ 2, Volume II – Speciális szolgáltatások. - 7. kiadás - M .: "Williams", 2007. - S. 1168. - ISBN 0-13-111826-9
  • Bruce Eckel. Java Philosophy = Gondolkodás Java nyelven. - 3. kiadás - Szentpétervár: "Piter", 2003. - S. 976. - ISBN 5-88782-105-1
  • Herbert Schildt, James Holmes. The Art of Java Programming = The Art of Java. - M .: "Dialektika", 2005. - S. 336. - ISBN 0-07-222971-3
  • Lubos Bruga. Gyors Java: Gyakorlati Expressz tanfolyam = Luboš Brůha. Java Hotová řešení.. - M .: Tudomány és Technológia, 2006. - P. 369. - ISBN 5-94387-282-5

A Java a SunMicrosystems által kifejlesztett programozási nyelv. A Java-alkalmazásokat általában speciális bájtkódba fordítják, így bármely Java virtuális gépen (JVM) futhatnak, a számítógép architektúrájától függetlenül. A hivatalos megjelenési dátum 1995. május 23. Manapság a Java technológia lehetővé teszi a statikus weblapok interaktív, dinamikus dokumentumokká alakítását, valamint elosztott, platformfüggetlen alkalmazások létrehozását.

A Java programokat bájtkódra fordítják, amelyet a Java Virtual Machine (JVM) hajt végre, egy olyan program, amely feldolgozza a bájtkódot, és tolmácsként utasításokat ad át a hardvernek.

Ennek a programvégrehajtási módnak az az előnye, hogy a bájtkód teljes függetlensége operációs rendszerés hardver, amely lehetővé teszi Java alkalmazások futtatását bármely olyan eszközön, amelyhez létezik megfelelő virtuális gép. Egy másik fontos jellemzője A Java technológia rugalmas biztonsági rendszer, mivel a program végrehajtását teljes mértékben a virtuális gép vezérli. Minden olyan művelet, amely meghaladja a program beállított engedélyeit (például megkísérli az adatokhoz való jogosulatlan hozzáférést vagy csatlakozni egy másik számítógéphez), azonnali megszakítást okoz.

A virtuális gép fogalmának hátrányai között gyakran szerepel, hogy a bájtkód virtuális gép általi végrehajtása csökkentheti a Java nyelven implementált algoritmusok programjának teljesítményét. A közelmúltban számos fejlesztés történt, amelyek kissé megnövelték a Java programok végrehajtásának sebességét:

A bájtkód gépi kódra történő fordításának technológiája közvetlenül a program működése során (JIT technológia), az osztályverziók gépi kódba történő mentésének lehetőségével,

A platformorientált kód (natív kód) széles körben elterjedt használata a szabványos könyvtárakban,

Gyorsított bájtkód-feldolgozást biztosító hardver (például Jazelle technológia, amelyet egyes ARM processzorok támogatnak).



A nyelv főbb jellemzői:

Automatikus memóriakezelés;

Kibővített képességek kivételes helyzetek kezelésére;

Bemeneti / kimeneti szűrőeszközök gazdag készlete;

Szabványos gyűjtemények halmaza, például tömb, lista, verem stb.;

Egyszerű eszközök rendelkezésre állása hálózati alkalmazások létrehozásához (beleértve az RMI protokoll használatát is);

Osztályok jelenléte, amelyek lehetővé teszik HTTP-kérések küldését és válaszok feldolgozását;

Beépített nyelvi eszközök többszálú alkalmazások létrehozásához;

Egységes adatbázis hozzáférés:

Egyedi SQL lekérdezések szintjén - JDBC, SQLJ alapján;

Az adatbázisban való tárolás lehetőségével rendelkező objektumok fogalmának szintjén - Java Data Objects és Java Persistence API alapján;

Sablonok támogatása (1.5-ös verziótól);

Programok párhuzamos végrehajtása.

1.4.3 C# programozási nyelv

2000 júniusában ismertté vált egy új programozási nyelv, amely a Microsoft zsigereiben született. Része lett új technológia A Microsoft felhívta a .NET-et (ejtsd: "Dot Net"). Ennek a technológiának a keretein belül a különböző programozási nyelveken írt programok (Common Language Runtime, CLR) egyetlen végrehajtási környezetet biztosítanak. Ezen nyelvek egyike, a legfontosabb ebben a környezetben, a C # (C #, olvassa el: „C Shark”, „C Sharp”). A nyelv nevével természetesen a C++-hoz való viszonyát akarták hangsúlyozni, mert a # két egymást metsző plusz. De leginkább az új nyelv hasonlít a Java-hoz. És kétségtelen, hogy megjelenésének egyik oka a Microsoft azon vágya volt, hogy válaszoljon a Sun kihívására.

Bár a C# szerzőit hivatalosan nem nevezik, a nyelvi kalauz egyik előzetes kiadásának címlapján Anders Hejlsberg, a Turbo Pascal és Delphi megalkotója, 1996-ban a Microsofthoz költözött, valamint Scott Wiltamuth szerepel.

Az egységes programvégrehajtási környezet az IL köztes nyelv (Intermediate Language - intermediate language) használatán alapul, amely szinte ugyanazt a szerepet tölti be, mint a Java virtuális gép bájtkódja. A .NET technológián belül használt különféle nyelvekről származó fordítók lefordítják a programokat IL-kódra. A Java bájtkódhoz hasonlóan az IL-kód egy hipotetikus veremszámítógép utasításait képviseli. De van különbség az IL kialakításában és használatában is.

Először is, a JVM-mel ellentétben az IL nincs egy programozási nyelvhez kötve. A Microsoft.NET előzetes verziói tartalmaznak C++, C# és Visual Basic fordítóprogramokat. A független fejlesztők más nyelveket is hozzáadhatnak azáltal, hogy fordítókat hoznak létre ezekből a nyelvekből az IL-kódhoz.

Másodszor, az IL nem programozott értelmezésre szolgál, hanem utólagos gépi kódba fordításra. Ezzel lényegesen nagyobb teljesítményű programok érhetők el. Az IL kódot tartalmazó fájlok elegendő információt tartalmaznak az optimalizáló fordító működéséhez.

„A C# egy egyszerű, modern, típusbiztos objektum-orientált nyelv, amely C-ből és C++-ból származik. A C# kényelmes és érthető lesz a C-t és C++-t ismerő programozók számára. A C# egyesíti a Visual Basic termelékenységét a C++ erejével." Ezek a szavak kezdik a C# leírását.

Fontolgat műszaki jellemzők nyelv:

A fordítási egység egy fájl (mint C, C++, Java). A fájl egy vagy több típusleírást tartalmazhat: osztályok (osztály), interfészek (interfész), struktúrák (struct), felsorolások (enum), delegált típusok (delegate) névtereken belüli eloszlásuk feltüntetésével vagy anélkül;

A névterek (névterek) szabályozzák a programobjektumok láthatóságát (mint a C++-ban). A névterek egymásba ágyazhatók. Programobjektumok használata megengedett anélkül, hogy kifejezetten meg kellene adni azt a névteret, amelyhez az objektum tartozik. Elég egy általános említés a névtér használatáról a use direktívában (mint a Turbo Pascalban). Vannak álnevek a névterek neveihez a use direktívában (mint az Oberon nyelvben);

Elemi adattípusok: 8 bites (sbyte, byte), 16 bites (short, ushort), 32 bites (int, uint) és 64 bites (hosszú, ulong) előjeles és előjel nélküli egész számok, egyszeri reals (float ) és dupla (dupla) pontosság, Unicode karakterek (char), logikai típus (bool, nem kompatibilis egész számokkal), decimális típus, amely 28 jelentős számjegy pontosságot biztosít (decimális);

Strukturált típusok: osztályok és interfészek (mint a Java-ban), egydimenziós és többdimenziós (a Java-tól eltérően) tömbök, karakterláncok (karakterláncok), struktúrák (majdnem ugyanazok, mint az osztályok, de nem a kupacba helyezve és öröklődés nélkül), felsorolások, inkompatibilis egész számokkal (mint a Pascalban);

Delegált típusok vagy egyszerűen „delegálások” (például eljárástípusok a Modul-2-ben és az Oberonban, funkciómutatók a C-ben és a C++-ban);

A típusokat referenciatípusokra (osztályok, interfészek, tömbök, delegáltak) és értéktípusokra (elemi típusok, felsorolások, struktúrák) osztják. A referenciatípusú objektumok a dinamikus memóriában (heap) vannak lefoglalva, és a referenciatípusok változói valójában mutatók ezekre az objektumokra. Az értéktípusok esetében a változók nem mutatók, hanem önmaguk értékek. Az implicit típuskonverziók csak akkor megengedettek, ha nem sértik a típusbiztonságot, és nem járnak információvesztéssel. Minden típus, beleértve az elemi típusokat is, kompatibilis az objektumtípussal, amely az összes többi típus alaposztálya. Létezik az értéktípusok implicit átalakítása objektumtípussá, amelyet boxolásnak neveznek, és egy explicit inverz konverzió – unboxing;

Automatikus szemétgyűjtés (mint az Oberon és a Java esetében);

Széles körű műveletek 14 prioritási szinttel. Műveletek újradefiniálása (mint az Algol-68, Ada, C++). A bejelölt és nem bejelölt operátorokkal vezérelheti a túlcsordulás szabályozását egész számokkal végzett műveletek végrehajtása során;

Módszerek értékparaméterekkel, referenciaparaméterekkel (ref) és kimeneti paraméterekkel (out). A ref és out szavakat nem csak a metódus leírásában, hanem híváskor is a paraméter elé kell írni. A kimeneti paraméterek jelenléte lehetővé teszi a hozzárendelések végrehajtásának szabályozását. A nyelv szabályai szerint minden változónak garantálni kell, hogy legyen értéke, mielőtt megpróbálná használni;

Vezérlő utasítások: if, switch, while, do, for, break, folytatás (mint a C, C++ és Java nyelven). A foreach utasítás, amely a "gyűjtemény" minden egyes elemén keresztül fut, a goto jump utasítás többféle változata;

Kivételkezelés (mint a Java-ban);

Tulajdonságok - osztályok (objektumok) elemei, amelyekhez a hozzáférés ugyanúgy történik, mint a mezők (értéket rendelhet vagy kaphat), de ezeket implicit módon hívott get és set szubrutinok hajtják végre (mint az Object Pascalban - a beviteli nyelv a Delphi rendszer);

Az indexelők osztályok (objektumok) elemei, amelyek lehetővé teszik az objektumok elérését ugyanúgy, mint a tömböket (index megadásával szögletes zárójelek). Az implicit módon nevezett get and set rutinok valósítják meg. Például egy karakterlánc karaktereihez való hozzáférés (olvasás céljából) végrehajtható egy tömb elemeiként, mivel a szabványos karakterlánc-osztályhoz egy indexelő van megvalósítva;

Az események olyan eljárási típusú osztályok (mezők vagy tulajdonságok) elemei (delegates), amelyekre az osztályon kívül, ahol meghatározásra kerültek, csak a += és -= műveletek alkalmazhatók, lehetővé téve az objektumok eseménykezelő metódusainak hozzáadását vagy eltávolítását. ebből az osztályból;

A mutatókat és címaritmetikát használó nem biztonságos (nem biztonságos) kód a program nem biztonságos módosítóval megjelölt részein lokalizálódik;

Egy előfeldolgozó, amely a C-től és a C++-tól eltérően csak feltételes fordítási lehetőségeket biztosít.

Természetesen a C # tárgyalt hiányosságai egyáltalán nem fosztják meg a nyelvet a kilátásoktól. Sok szempontból előnyösebb, mint a C++. A C++ nyelvvel való általános elégedetlenség, amit már egy új nyelv megjelenése is felismer, a C# sikerének egyik fő előfeltétele.

Ha összehasonlítjuk a C#-t a Java-val, sok hasonlóságot láthatunk. Igaz, ha a Java rendszerek többplatformosak, akkor a C # megvalósítás csak az operációs rendszer számára létezik. Windows rendszerekés csak egy. De a nehézkedés ellenére várható, hogy a nyelvet más rendszerekre is implementálják. Emellett maga a Microsoft .NET platform egyetlen programvégrehajtási környezettel alternatív architektúrákba, elsősorban UNIX rendszerekbe kerülhet.

A C# reálisabb nyelvnek tűnik, mint a Java. A Java-val ellentétben önellátó. Vagyis bármilyen programot írhat C#-ban anélkül, hogy más nyelveket használna. Ez a „nem biztonságos” kódblokkok jelenléte miatt lehetséges, amelyek közvetlenül hozzáférhetnek a hardverhez. A Java nyelven az alacsony szintű létesítményekhez való hozzáféréshez "natív módszereket" (natív módszereket) kell használni, amelyeket más nyelveken kell programozni.

És természetesen a C # kilátásai elsősorban a Microsoft által ennek népszerűsítésére tett erőfeszítésekhez kapcsolódnak.