Miskolci Egyetem Általános Informatikai Tanszák
Bevezetés a Java programozási nyelvbe Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ficsor Lajos
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
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
2
JAVABEV /
3
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
Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
CBEV/ 1
Miskolci Egyetem Általános Informatikai Tanszák
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) Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
4
A Java egyszerre fordított és interpretált JVM
Forráskód Ficsor Lajos
Byte kód
Gépi kód
Bevezetés a Java programozási nyelvbe
JAVABEV /
5
JAVABEV /
6
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)
Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
CBEV/ 2
Miskolci Egyetem Általános Informatikai Tanszák
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 Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
7
JAVABEV /
8
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) Ficsor Lajos
Bevezetés a Java programozási nyelvbe
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] + "!" ); } } Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
9
CBEV/ 3
Miskolci Egyetem Általános Informatikai Tanszák
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ó
Ficsor Lajos
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
Ficsor Lajos
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
Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
12
CBEV/ 4
Miskolci Egyetem Általános Informatikai Tanszák
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 Ficsor Lajos
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
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
14
JAVABEV /
15
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 Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
CBEV/ 5
Miskolci Egyetem Általános Informatikai Tanszák
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. Ficsor Lajos
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 Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
17
Interface 2. Példa: 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. Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
18
CBEV/ 6
Miskolci Egyetem Általános Informatikai Tanszák
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 { .. }; } Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
19
Kivételek 2. A kivételeket lehet • elkapni: try { a.fgv(); } catch( RunTimeException ex ) { .. };
Ficsor Lajos
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 Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
21
CBEV/ 7
Miskolci Egyetem Általános Informatikai Tanszák
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. Ficsor Lajos
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 Ficsor Lajos
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
Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
24
CBEV/ 8
Miskolci Egyetem Általános Informatikai Tanszák
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
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
25
JAVABEV /
26
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
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
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. Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
27
CBEV/ 9
Miskolci Egyetem Általános Informatikai Tanszák
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
Ficsor Lajos
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.
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
29
JAVABEV /
30
A java.io csomag • alapvető input/output műveleteket • file kezelési műveleteket végző osztályokat tartalmaz.
Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
CBEV/ 10
Miskolci Egyetem Általános Informatikai Tanszák
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. Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
31
JAVABEV /
32
JAVABEV /
33
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
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
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.
Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
CBEV/ 11
Miskolci Egyetem Általános Informatikai Tanszák
A java.applet csomag • A beágyazott Java programok (appletek) készítéséhez
Ficsor Lajos
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) Ficsor Lajos
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) Ficsor Lajos
Ficsor Lajos
Bevezetés a Java programozási nyelvbe
JAVABEV /
36
CBEV/ 12
Miskolci Egyetem Általános Informatikai Tanszák
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. Ficsor Lajos
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 Visual Age
Gyártó IBM
Visual cafe Visual Studio J++ Forte for Java JBuilder
Symantec Microsoft Sun Borland
Ficsor Lajos
Ficsor Lajos
Platform Win32, OS/2, különféle UNIX platformok Win32 Win32 (elavul a C# miatt) Solaris, Linux, Win32 Win32, Solaris, Linux
Bevezetés a Java programozási nyelvbe
JAVABEV /
38
CBEV/ 13