Bevezetés a Java programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék Bevezetés a Java programozási nyelvbe JAVABEV / 1 Egy kis történelem 1. 1990-es évek eleje: a SUN belső project-je (set top box) platform-független technológia szükségessége. Egyik akkori nyelv sem volt megfelelő, ezért terveztek egy újat. 1990-es évek közepe: az Internet rohamos terjedése újra felvetette a platform-független technológia szükségességét újraéledt a project, de általánosabb célkitűzéssel Bevezetés a Java programozási nyelvbe JAVABEV / 2 Egy kis történelem 2. 1995: Java 1 platform 1999: Java 2 platform Jelenleg: (2000. november) J2SDK 1.4 A Java egyszerre programozási nyelv platform Bevezetés a Java programozási nyelvbe JAVABEV / 3
A Java nyelv Platform-független magas szintű programozási nyelv objektum-orientált egyszerű elosztott (distributed) interpretált (de speciális módon) robosztus biztonságos hordozható architektúra független többszálú (multithreaded) Bevezetés a Java programozási nyelvbe JAVABEV / 4 A Java egyszerre fordított és interpretált JVM Forráskód Byte kód Gépi kód Bevezetés a Java programozási nyelvbe JAVABEV / 5 A Java mint platform A Java egy tisztán software megvalósítású platform is. Két része van a Java virtuális gép (JVM) a Java alkalmazási interface (Java API) Bevezetés a Java programozási nyelvbe JAVABEV / 6
Java program és applet Java program: Java-fordítóval készült önálló alkalmazás. az adott architektúrán futó JVM hajtja végre mindazon jogokkal rendelkezik, mint bármely más alkalmazás Applet: HTML oldalba ágyazott Java-kód a HTML oldal értelmezője (a böngésző) hajtja végre (a böngésző valósítja meg a JVM-et) korlátozott jogokkal rendelkezik Bevezetés a Java programozási nyelvbe JAVABEV / 7 A Java API Részei: alapvető funkciók (objektumok, stringek stb.) applet-ek hálózat-kezelés (URL, TCP, UDP, RMI) többnyelvűség biztonság software komponensek (JavaBeans) objektum szerializáció (perzisztencia) Java Database Connectivity (JDBC) Bevezetés a Java programozási nyelvbe JAVABEV / 8 A "Hello World" program class HelloWorld { public static void main( String args[] ) { System.out.println( "Hello" ); if ( args.length == 1 ) System.out.println( "World!" ); else System.out.println( args[0] + "!" ); } } Bevezetés a Java programozási nyelvbe JAVABEV / 9
Típusok Ugyanazok az alaptípusok, mint a C++ nyelvben, de pontosan specifikált helyfoglalással pontosan specifikált ábrázolási móddal minden alaptípusnak létezik egy megfelelő befoglaló osztálya is, hogy ahol osztálytípus szükséges, ott az legyen alkalmazható Bevezetés a Java programozási nyelvbe JAVABEV / 10 Operátorok, műveletvégzés A pointerekhez kapcsolódó operátorok kivételével ugyanaz, mint C++ -ban. Különbségek: két új operátor ( >>> és instanceof) balról jobbra szabály a kifejezések kiértékelésénél a kifejezésekben pontos típusegyezés szükséges tagkiválasztás mindig a. (pont) operátor nincs scope operátor Bevezetés a Java programozási nyelvbe JAVABEV / 11 Utasítások Gyakorlatilag ugyanazok. mint a C++ utasításai, de a break és a continue címkézhető nincs goto utasítás Bevezetés a Java programozási nyelvbe JAVABEV / 12
Osztályok Egy gyökerű: minden definiált osztály implicite az Object osztály leszármazottja. Csak egy ősosztály lehet! Osztály definíció: kulcsszó class nev extends bazis {.. } kulcsszó: abstract vagy static Metódusok: csak belső definíció Láthatósági kulcsszó: csak az adott mezőre érvényes. Alapértelmezés: protected Bevezetés a Java programozási nyelvbe JAVABEV / 13 Objektumok 1. Egy osztály típusú változó mindig referencia típusú. Objektum létrehozása mindig a new operátorral Egy osztály típusú változó definiálása csak referenciát hoz létre, objektumot nem. Értékadás: két referencia közötti értékadás után a két változó ugyanarra az objektumra hivatkozik Bevezetés a Java programozási nyelvbe JAVABEV / 14 Objektumok 2. Az objektumok közötti értékadást a clone metódussal tudjuk elérni minden osztály az Object ősosztályból örökli a programozó szükség esetén átdefiniálhatja. class A{.. }; A a, b; a = new A(); b = a; //Egy objektum két névvel! b = a.clone(); //a b egy új objektum //referenciája Bevezetés a Java programozási nyelvbe JAVABEV / 15
Szemétgyűjtés Minden objektum csak referencián keresztül érhető el. Ha egy objektumra egyetlen referencia sem hivatkozik, akkor az elveszett a program számára. Minden Java program egyik szálaként fut egy szemétgyűjtő algoritmus, amely előbb-utóbb törli a memóriából a hivatkozás nélküli objektumokat. Java-ban nincs értelme az objektum törlésének, csak a rá való hivatkozást kell megszüntetni. Bevezetés a Java programozási nyelvbe JAVABEV / 16 Interface 1. Az interface tagjainak csak deklarációja van, nincs definíciója. C++ -ban az absztrakt osztály a megfelelője Bármely osztály implementálhat egy vagy több interface-t. Az osztály feladata az interface elemeinek definíciója. Ezzel megvalósítható a többszörös öröklésnek megfelelő kapcsolatrendszer Bevezetés a Java programozási nyelvbe JAVABEV / 17 Példa: Interface 2. interface A{ int a; void fgv( void ); } class B implements A{.. } class C implements A{.. } Ezután A típusú referenciával mind B, mind C típusú objektumot elérhetünk. Bevezetés a Java programozási nyelvbe JAVABEV / 18
Kivételek 1. Hasonló mechanizmus, mint a C++ nyelvben, de szigorúbb szabályokkal. Egy függvény definíciójában mindig fel kell sorolni azokat a kivételeket, amelyek explicite keletkezhetnek a függvény végrehajtása során. class A { int a; void fgv( void ) throws RunTimeException {.. }; } Bevezetés a Java programozási nyelvbe JAVABEV / 19 Kivételek 2. A kivételeket lehet elkapni: try { a.fgv(); } catch( RunTimeException ex ) {.. }; Bevezetés a Java programozási nyelvbe JAVABEV / 20 Kivételek 3. továbbterjeszteni void fgv1( void ) throws RunTimeExceprion {.. a.fgv(); } Más lehetőség nincs, tehát nem lehet lekezeletlen kivétel a programban a szabályok betartását már a fordító is ellenőrzi Bevezetés a Java programozási nyelvbe JAVABEV / 21
Modularitás a Java nyelvben A Java-ban a programok tagolásának eszköze a csomag (package). Minden csomagnak saját névtere van A Java-ban a csomagokban lehetnek alcsomagok, a csomagszerkezet fastruktúrát alkot A csomag tartalmát a fordítási egységek adják meg. A fordítási egységekben találhatók a csomaghoz tartozó kódok, azaz típusok (osztályok és interface-ek) definíciói. Bevezetés a Java programozási nyelvbe JAVABEV / 22 Hivatkozások A csomagokra hierarchikus szerkezetű azonosítóval hivatkozhatunk. Az A csomag B alcsomagjában levő C alcsomag: A.B.C Az egyes csomagokban található típusokra teljesen analóg módon hivatkozhatunk. Például a fenti csomagban definiált T típus: A.B.C.T Bevezetés a Java programozási nyelvbe JAVABEV / 23 Csomagok és fordítási egységek 1. Csomagok és fordítási egységek összerendelése: leképezés az operációs rendszer file-rendszerére tárolás adatbázisban. A továbbiakban az első megoldással foglalkozunk. A fordítási egységek file-ok.java kiterjesztéssel a csomag-alcsomag nevek pedig katalógus nevek, amelyekből útvonal generálódik Bevezetés a Java programozási nyelvbe JAVABEV / 24
Csomagok és fordítási egységek 2. A fenti példában említett A.B.C csomag megkeresése a következőképpen történik: egy előre kijelölt katalógus A alkatalógusának B alkatalógusában a Java fordító a C.java filet-keresi a lefordított byte-kódot ugyanoda C.class néven helyezi el. Hálózati csomag: az első csoportnév nagybetű: HU.uni-miskolc.iit.queen.ficsor.javap Bevezetés a Java programozási nyelvbe JAVABEV / 25 A fordítási egység szerkezete 1. Egy fordítási egység az alábbi részekből áll csomagdeklaráció importdeklarációk típusdeklarációk Csomagnév megadása (csomagdeklaráció) package csomagnév Bevezetés a Java programozási nyelvbe JAVABEV / 26 A fordítási egység szerkezete 2. Egy másik csomagban deklarált publikus típust a teljes azonosítójával kell megnevezni. Ezt rövidíthetjük az adott típust importálásával import A.B.C.T Egy csomag valamennyi típusát is importálhatjuk import A.B.C.* Minden programba automatikusan importálódik a java.lang csomag. Bevezetés a Java programozási nyelvbe JAVABEV / 27
A Java osztály könyvtár A Java fejlesztő környezet számos csomagot tartalmaz, amelyekben hasznos, általános célú típusok (osztályok és interface-ek) találhatók. A Java nyelv hatékony alkalmazásához szükséges a kész osztályok használatának elsajátítása. A Java API-t implementáló osztályok a java csomag különböző alcsomagjaiban találhatók Bevezetés a Java programozási nyelvbe JAVABEV / 28 A java.lang csomag Automatikusan importálódik. Tartalmazza az osztályhierarchia gyökerét jelentő Object osztályt, az alaptípusokat implementáló osztályokat a futtatáshoz, kivételkezeléshez és a futás közbeni biztonsági ellenőrzésekhez szükséges magas szintű osztályokat. Bevezetés a Java programozási nyelvbe JAVABEV / 29 A java.io csomag alapvető input/output műveleteket file kezelési műveleteket végző osztályokat tartalmaz. Bevezetés a Java programozási nyelvbe JAVABEV / 30
A java.util csomag Hasznos, bár egymáshoz logikailag lazán kapcsolódó osztályok gyűjteménye. idő-dátum kezelés string kezelés megfigyelő és megfigyelt objektumok dinamikus tömb és verem véletlenszám generátor stb. Bevezetés a Java programozási nyelvbe JAVABEV / 31 A java.awt csomag Abstract Windowing Toolkit Platform független felhasználói interface komponensek megjelenítésére, kezelés új komponensek létrehozása Bevezetés a Java programozási nyelvbe JAVABEV / 32 A java.net csomag A hálózatkezelést lehetővé tevő osztályok gyűjteménye. TCP szinten URL-eken keresztül, a szokásos protokollok segítségével. Bevezetés a Java programozási nyelvbe JAVABEV / 33
A java.applet csomag A beágyazott Java programok (appletek) készítéséhez Bevezetés a Java programozási nyelvbe JAVABEV / 34 A JavaBeans A komponens alapú programozás lehetőségét teremti meg. Java-ban íródott. Alapvető cékitűzései: újrafelhasználható software komponensek, ezen belül fejlettebb GUI komponensek (Swing) Java appletek együttműködése egymással és a böngésző egyéb komponenseivel Java programok összekapcsolása más komponensalapú rendszerekkel (OLE, ActiveX, OpenDoc támogatás) elosztott alkalmazások készítése (CORBA, DCOM technológiák támogatása) Bevezetés a Java programozási nyelvbe JAVABEV / 35 Az alap fejlesztő környezet A minimális környezet, (a JDK), az alábbiakból áll: parancssoros Java fordító egy szövegszerkesztővel debugger A Java API-t implementáló alapcsomagok egy böngésző vagy segédprogram az appletek futtatásához a JVM (Java virtuális gép) implementációja a Java programok futtatásához dokumentáció (online formában és számos könyv alakjában is rendelkezésre áll) Bevezetés a Java programozási nyelvbe JAVABEV / 36
Az alap futtató környezet Java programok futtatásához szükséges a JRE (Java Runtime Environment) a virtuális gépet implementáló program az alaposztályok A Java filozófiájából adódóan a fejlesztés és a futtatás környezete különböző lehet. Ha tehát valamilyen platformra csak a JRE van implementálva, az alkalmas Java programok futtatására, legfeljebb másik platformon kell fejleszteni. Bevezetés a Java programozási nyelvbe JAVABEV / 37 Fejlesztő eszközök A fejlesztési munka megkönnyítésére számos komplett fejlesztő környezet létezik (kereskedelmi vagy szabad software). Az ismertebbek Név Gyártó Platform Visual Age IBM Win32, OS/2, különféle UNIX platformok Visual cafe Symantec Win32 Visual Studio J++ Microsoft Win32 (elavul a C# miatt) Forte for Java Sun Solaris, Linux, Win32 JBuilder Borland Win32, Solaris, Linux Bevezetés a Java programozási nyelvbe JAVABEV / 38