Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 1.ELŐADÁS 2014-2015 tavasz Java bevezetés, nyelvi alapelemek
Előadás tematika 2 1.Előadás: Bevezetés a Java nyelvbe: Java történet, Java nyelv tulajdonságai, Szintaxis, Programozói környezet, Egyszerű példák A Java nyelv alapelemei: változók, konstansok, metódusok, osztályok, objektumok, tömbök, vezérlési szerkezetek, operátorok. Csomagok használata és importálása. 2. Előadás: Objektumorientált programozás Javá-ban: Az osztályok részletes ismertetése. Példányváltozók, metódusok, metódusok hívása, metódus nevek túlterhelése objektumok használata, hozzáférési kategóriák. Statikus tagok: osztályváltozók, osztálymetódusok. Konstruktorok, túlterhelés, láthatóság, getter-setter metódusok. 3. Előadás: Objektumorientált programozás Javá-ban: Konstruktorok, inicializáló blokkok, destruktor jellegű metódusok. Egységbe zárás, öröklődés, polimorfizmus, absztrakt osztályok és metódusok. Interfészek. Interfészek közötti öröklődés, interfészek implementálása. Rendező interface-ek: Comparator, Comparable; Interface készítés; equals() és hashcode() felüldefiniálása. 4. Előadás: Kivételkezelés Javá-ban 5. Előadás: Grafikus kezelői felület létrehozása (Java AWT) és esemény kezelés Az AWT csomag, Layout manager, AWT komponensek, Appletek készítése 6. Előadás: 7. Előadás: Grafikus kezelői felület létrehozása (Java Swing) SWING csomag, SWING komponensek Java Input/Output: Csatornák, leképzés fizikai adatszerkezetre, szűrők, véletlen elérésű file-ok, kapcsolat a file rendszerrel, kivételek kezelése. Sorosítás. 8. Előadás: Hálózati alkalmazások készítése A java.net package, ServerSocket, Socket, és DatagramSocket osztályok 9. Előadás: Szálak. Szálak jellemzői, létrehozása, vezérlése. Szinkronizálás. 10. Előadás: Java Kollekciók és generikus típusok 11. Előadás: Projektek védése
Labor tematika 3 Nagyjából követi az előadás tematikát. Kitűzött feladatok közös illetve egyéni megoldása. Házi feladatok bemutatása Fejlesztési eszközök: JDK 8 (Java Platform, Standard Edition) (http://www.oracle.com/technetwork/articles/javase/i ndex-jsp-138363.html) IDE szerkesztő: NetBeans https://netbeans.org/ http://www.oracle.com/technetwork/articles/javase/indexjsp-138363.html
Labor tematika Fejlesztési eszközök 4 Egyéb fejlesztési eszközök: Eclipse https://eclipse.org/home/index.php IntelliJ IDEA https://www.jetbrains.com/idea/ UML eszközök: Visual Paradigm (Integrálható Netbeans-be, Eclipse-be) ArgoUML OpenAmeos
Könyvészet és dokumentáció 5 Könyvtári könyvek Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.
Könyvészet és dokumentáció 6 Könyvtári könyvek Antal Margit: Objektumorientált programozás, Scientia Kiadó, 2007 Más jegyzet: http://nagygusztav.hu/sites/default/ files/csatol/java_programozas_1.3.p df
Könyvészet és dokumentáció 7 Hasznos linkek http://docs.oracle.com/javase/7/docs/ http://docs.oracle.com/javase/tutorial/ http://www.tutorialspoint.com/java/ http://www.learnjavaonline.org/ http://www.javatpoint.com/
Könyvészet és dokumentáció 8 Előadások, labor feladatok, egyéb dokumentációk megtálalhatok az alábbi linken: http://www.emte.siculorum.ro/~pallaszlo/oktatas_hu.html (Java programozás)
Vizsgakövetelmények 9 Felmérési mód: kollokvium Zárthelyi: 60% (11. hét (Labor)) Gyakorlat + Elmélet Projekt: 30% (védés - 11. hét (Előadás)) Házi feladat: 10% (2 hetes határidő) Mind a zárthelyi és projekt átmenő (5-ös) kell legyen a sikeres vizsgához Labor óra: max 3 hiányzás engedélyezett Részletes követelmények
10 1.Előadás Tartalom: 1. Java történet 2. Java nyelv tulajdonságai 3. Programozói környezet 4. Java nyelv alapelemei: változók, konstansok, vezérlési szerkezetek, operátorok, metódusok, osztályok, objektumok, tömbök, csomagok használata
Programozási nyelvek rangsor 2014 11 TIOBE IEEE Spectrum
Java nyelv bevezető a SUN Microsystems által kifejlesztett általános célú, objektumorientált programozási nyelv A fejlesztések a 90-es évek elején kezdődtek és folytatódtak egészen napjainkig 2009-ben az Oracle felvásárolta a SUN céget 2011-ben, Java 1.7-es verzió az Oracle gondozásában 2014-ben, 1.8-as verzió Szlogen: write once, run anywhere
Java nyelv jellemzői Egyszerű Szintaxisa hasonlít a C, C++ nyelvekre, de számos elemet egyszerűsítettek. Automatikus memória kezelés Objektumorientált Elosztott Támogatja a HTTP, FTP protokollokat Robusztus, biztonságos Nincsenek pointerek
Java nyelv jellemzői Architektúra semleges, hordozható Bájtkódot használ, amit a virtuális gép futtat Interpretált Just-In-Time (JIT) compiler Többszálú Párhuzamosításra lehet használni, ami hasznos lehet főleg több processzoros gépek esetén
Java nyelv jellemzői A Java forráskód.java kiterjesztésű A forráskód.class kiterjesztésű fájlokba fordítódik A.class fájl bájtkódot tartalmaz (nem natív kód) A bájtkódot a Java Virtuális Gép (Java Virtual A bájtkódot a Java Virtuális Gép (Java Virtual Machine) hajtja végre
Java nyelv jellemzői A Java VM (JVM) tetszőleges operációs rendszerre telepíthető, ezért ugyanaz a bájtkód (.class) mindegyik operációs rendszeren fut
Java kronológia 1991: James Gosling, Oak (tölgyfa) nyelv 1996: JDK 1.0, fordító, virtuális gép, javac, appletek 1997: JDK 1.1 1988: J2SE 1.2, esemény kezelés, JIT 2000: J2SE 1.3, J2EE, J2ME, JDBC, stb. 2002: J2SE 1.4 2004: J2SE 5.0, generikus osztályok 2006: Java SE 6 2011: Java SE 7 2014: Java SE 8
Java szabványok Java Standard Edition (J2SE) Kliens alkalmazások, appletek készítése Java Enterprise Edition (J2EE) Szerver oldali alkalmazások készítése (Java Servlets, Java Server Pages) Server Pages) Java Micro Edition (J2ME) Mobil alkalmazások készítése
Java keretrendszer Java SE 8 19 Java nyelv Eszközök, Java API javac, java, javadoc, jar, JConsole, stb. Felhasználói felületek JavaFX, AWT, Swing Integration libraries JDBC Java Virtuális gép
20 Java keretrendszer Java SE 8
Java keretrendszer Java SE 8 21 Java platform leegyszerűsítve: Java VM Java API (Application Programming Interface): Sok használatra kész szoftverkomponenst tartalmaz: Sok használatra kész szoftverkomponenst tartalmaz: csomagokba szervezett osztályokat es interfészeket
Java környezet 22 Java programok futtatása Elegendő a JRE (Java Runtime Environment) Java programok fejlesztése Java Development Kit (JDK) Tartalmazza a JRE-t és egyéb eszközöket: javac: Java fordító java: futtatóprogram javadoc: dokumentáció generáló jar: JAR fájlok kezelésére szolgál IDE: pld. NetBeans
Forrásprogram(.java) szerkezete 23 Csomagok importálása Main metódus: a program belépési pontja App a fordítási egység egyetlen publikus osztálya
Forrásprogram 24 Egy forrásfájl neve a fájlban implementált osztály nevével egyezik meg Ha a megvalósított osztály valamilyen csomagban (package) van, akkor a fájl a package nevével azonos alkönyvtárba kell elhelyezni
Fordítás, futtatás parancssorból 25 Fordításhoz használható a javac parancs Példa: javac eloadasok\e1\hello.java Futtatás a java paranccsal történik Példa: java eloadasok.e1.hello A Path környezeti változó beállítása szükséges Példa: set PATH=%PATH%;c:\ProgramFiles\Java\jdk1.8.0_31\bin\
26 Példa Hello World!, NetBeans-ben
Példa Hello World!, NetBeans-ben 27 Szerkesztés Futtatás, kimenet:
28 A Java nyelv alapelemei
Azonosítók 29 A Java az Unicode karakterkészletet használja Betűvel kezdődik betűvel vagy számmal folytatódik Case-sensitive, azaz különböznek a kis- és nagybetűk Az azonosítók hossza nincs korlátozva A nyelv kulcsszavai nem lehetnek azonosítók
Megjegyzések 30 Javában a megjegyzés (comment) két típusú lehet: Egysoros megjegyzés: // Ez egy egysoros megjegyzes Többsoros megjegyzés: /* */ Dokumentációs megjegyzés: /** */
Literálok 31 Literál: egy állandó, amely beépül a program kódjába Egész literál: Decimális: +125, -12 Oktális: 021, 077 Hexadecimális: 0xa1, 0xff Valós literál Tizedes: 3.14 Lebegőpontos: -3.4e12 Karakter literál: a, X, \u0041, \t Szöveg literál: almafa
32 Kivételes karakterek
Egyszerű típusok (primitív) 33 boolean: logikai típus (true, false) char: 16 bites Unicode karakter byte: 8 bites egész szám (-128 - +127) short: 16 bit, (-32 768 - +32 767) int: 32 bit (-2 147 483 648 - +2 147 483 647) long: 64 bit (-9 223 372 036 854 775 808 - +...) float: 32 bites lebegőpontos szám (-3,40292347E+38 - +3,40292347E+38) double: 64 bit (-1,79769313486231570E+308 - +...)
Változók 34 Változó: egy névvel azonosított memóriaterület Egy változónak mindig van azonosítója, adott méretű memóriahelye, típusa és aktuális értéke Javában minden változót deklarálni kell Két típusú változó: egyszerű (primitív), referencia (lásd később) Deklarálás, inicializálás: típus változo1 [=kifejezes1], változo2; Példa: double x = 4.5, y;
Konstansok 35 Konstans: Egy változónak a befagyasztása, azaz nem engedjük megváltoztatni Nem összetévesztendő a literállal Kódolási konvenció: nagybetűvel írjuk Példa: final int EVSZAM=2015;
Operátorok 36 Java kifejezés: operandusokból és operátorokból (műveletekből) áll. Operátor: Unáris: egyetlen operandusa van Prefix: operandus előtt szerepel (++i) Postfix: operandus után szerepel (i--) Bináris: két operandusa van
Operátorok 37 Unáris postfix és prefix operátorok: [ ] tömbképző (lásd később).(pont) minősítő operátor (param) metódus képző ~,! Bitenkénti operátorok new példányosító operátor (lásd később) (típus) kifejezés típuskényszerítő +(plusz), -(minusz) előjel operátorok ++, -- léptető operátorok
Operátorok 38 Aritmetikai operátorok: + összeadás - kivonás * szorzás / valós osztás % maradékképzés Relációs operátorok: > nagyobb >= nagyobb vagy egyenlő < kisebb <= kisebb vagy egyenlő = = egyenlő! = nem egyenlő
Operátorok 39 Logikai operátorok: && logikai és logikai vagy! logikai nem & bitenkénti és bitenkénti vagy ^ bitenkénti nem ~ bitenkénti tagadás (negáció) Feltételes kiértékelés: (feltétel)? kif1 : kif2 Példa: int y = 70; int x = (y>50)?100:0;
Operátorok 40 Értékadó operátorok: = alapértékadó operátor, érték rendelése változóhoz Rövidített értékadó operátorok: +=, -=, *=, /=, %=, stb. Példa:
Kifejezések kiértékelési sorrendje 41 A kifejezések kiértékelési sorrendjét meghatározza: Zárójelezés Operandusok prioritása Azonos prioritás eseten balrol-jobbra szabály, kivétel az Azonos prioritás eseten balrol-jobbra szabály, kivétel az értékadás, amely jobbrol-balra értékelődik ki.
42 Operátorok precedenciája
Utasítások 43 Blokk utasítás: { } Mindaz, amit abban a blokkban adunk meg, pontosan arra a blokkra érvényes Egy blokk utasításokból áll Minden utasítást pontosvessző zár le
Utasítások fajtái 44 Deklaráló utasítás (Memóriahelyek foglalása): int letszam; Értékadó utasítás (Memóriahelyek foglalása): int letszam; Postfix és prefix növelő és csökkentő utasítások : letszam++; --letszam; Metódushívás: System.out.println("Hello"); Példányosítás (Új objektum létrehozása): adatum = new Datum(2000,11,05); Programvezérlő utasítás: if (i==0)... Üres utasítás: ; (csak egy pontosvessző)
Típuskonverziók 45 Java erősen típusos nyelv: a fordító a típus kompatibilitásának az ellenőrzését minden esetben elvégzi Két szempont: Automatikus (implicit) vagy kényszerített (explicit) konverzió Szűkítő vagy bővítő konverzió Példa: double d; int i = 5; d = i; // int konvertálása doubel-re implicit módon. Bővités
Típuskonverziók 46 Példa: d = 79.4; i = (int)d; // double konvertálása int-re explicit módon. Szűkités ->79 i = d; //szintaktikai hiba A szűkítő konverzió információvesztéssel jár
Egyágú szelekció - if 47 Példa
Kétágú szelekció - if..else 48 if (feltétel) if (feltétel) { utasítás1; utasítás; else... utasítás2; } else { utasítás;... }
Többágú szelekció - else if és switch 49 if (feltétel1) utasítás1; else if (feltétel2) utasítás2;... else utasításn; switch (kifejezés) { case érték1: utasítások; break; case érték2: utasítások; break;... default: utasítások; }
50 Többágú szelekció - else if és switch
Iterációk for 51 for (inicializálás; feltétel; léptetés) { utasítás1; utasítás2;... utasításn; }
Iterációk for Parancsori paraméterek kiíratása:
Iterációk while, do while 53 while (feltétel) { utasítás1; utasítás2;... utasításn; } do { utasítás1; utasítás2;... utasításn; } while (feltétel);
54 Iterációk while, do while - Példa
Kiugrás ciklusból Break: az aktuális utasításblokkból (pl. ciklusból) való azonnali kiugrást eredményezi Continue: hatására a vezérlés az utasításblokk (ciklus) végére kerül Példa:
Metódusok Eljárás: Utasítások egyszerű végrehajtása Visszatérítési típusa: void (semleges) Függvény: Van visszatérítési értéke Eljárásként is hívható Statikus metódusból kizárólag az osztály statikus elemeire hivatkozhatunk
Metódusok Szintaxis: <módosítók>]<visszatérési típus><metódus neve> ([<formális paraméterlista>])[<throws...>] { <metódusblokk> } Megjegyzések: Javában csak érték szerinti paraméterátadás van, azaz a paraméter helyén szereplő értékről másolat készül. A metódus ezt a másolatot látja, használja Fordítási hiba, ha függvényben van return nélküli ág; lokális változó nincs inicializálva
Metódusok - Példa
Metódusok - Példa
Metódusok - Példa
Java osztályok rendszerezése 61 Java API: kb. 2000 osztály A java.lang csomag legfontosabb osztályai:
Az Object osztály 62 Minden osztály közös őse Bármely osztályból létrehozott példány az egy objektum A Java minden objektumára jellemző metódusokat tartalmaz. Például: boolean equals(object obj) String tostring() Class getclass()
Primitív típus vs. Referencia 63 Primitív: 8 primitív típus: boolean, char, byte, short, int, long, float, double A változó azonosítójával közvetlenül hivatkozunk a változó memóriahelyére A deklaráló utasítás végrehajtása: memória foglalás A programozó nem definiálhat primitív típust
Primitív típus példa 64 Közvetlen (direkt) címzés:
Referencia típus 65 Objektumra mutat A változó azonosítójával az objektum memóriahelyére közvetve hivatkozunk egy referencián (hivatkozáson) keresztül A hivatkozás rejtve marad (automatikus indirekció) NULL referencia: nem mutat semmire, nem hivatkozik objektumra
Referencia típus példa 66 Ember ember = new Ember("Erika",1953); ember objektum címe
Objektum létrehozása 67 Létrehozás a new operátorral: new <OsztályAzonosító>(<aktuális paraméterlista>) Példányosítás Memóriafoglalás Konstruktorhívás: beállítja az objektum kezdeti állapotát adatok kapcsolatok Visszaadja az új objektum referenciáját
Objektum deklarálása 68 Deklarálás: <OsztályAzonosító> objektum; Az objektum egy referencia típusú változó Memóriafoglalás: csak a referencia részére Az objektum létrehozása a programozó feladata <OsztályAzonosító> objektum; objektum=new <OsztályAzonosító>(<aktuálisparaméterlista>); <OsztályAzonosító> objektum = new <OsztályAzonosító>(<aktuális paraméterlista>);
69 Objektum értékadás
Objektumok egyenlőségvizsgálata 70 Objektumok állapotát nem lehet a (==,!=) operátorokkal összehasonlítani (referencia hasonlíás) Objektumok egyenlőségét az equals metódussal szokás megállapítani Példa: Kimenet:
Objektumok egyenlőségvizsgálata 71 Objektumok állapotát nem lehet a (==,!=) operátorokkal összehasonlítani Objektumok egyenlőségét az equals metódussal szokás megállapítani Példa: Kimenet:
Objektum élete, automatikus 72 szemétgyűjtés Automatikus szemétgyűjtés (garbage collection): A rendszer bizonyos időnként automatikusan felszabadítja a hibatkozás nélküli objektumok memóriahelyét Példa: ember1 = new String("Gábor"); ember1 = new String("Anikó");
A String osztály 73 Szöveg tárolására szolgál Értéke egész élete során állandó marad Unikód karakterek sorozata, a karakterek sorszámozottak (0 a legelső sorszám) Létrehozás: String szoveg=new String( Kész!"); String szoveg= Kész!"; Konstruktorok: String() String(value: String), String(buffer: StringBuffer)
A String osztály 74 Hossz, index length(): int charat(index: int): char Manipulált karakterláncok tolowercase(): String touppercase(): String trim(): String replace(oldchar: char, newchar: char): String substring(beginindex: int, endindex: int): String Konkatenálás concat(str: String): String
A StringBuffer osztály 75 Manipulálható szöveg Konstruktorok StringBuffer() StringBuffer(length: int) StringBuffer(str: String) Kapacitás, hossz, index capacity(): int length(): int ensurecapacity(minimumcapacity: int) setlength(newlength: int) charat(index: int): char
76 A StringBuffer osztály - Példa
Objektum átadása paraméterként 77 Az aktuális paraméter értékadás szerint kompatibilis kell legyen a formális paraméterrel Nem az objektum másolódik át, hanem csak a referencia Az átmásolt referenciával éppúgy meg tudjuk változtatni az objektumot
78 Objektum átadása paraméterként
Primitív típusok csomagolása 79 Célok: Primitív típusú változók objektumként kezelése Primitív típusokkal kapcsolatos információk lekérdezése Minden primitív típushoz tartozik egy csomagoló osztály (wrapper class): Character, Boolean, Byte, Short, Integer, Long, Float, Double. A csomagoló osztályok példányai változtathatatlanok Konstruktorok: <Type> (<type> value) Például: Character cobj = new Character('A');
Primitív típusok csomagolása 80 Konstruktorok: <Type> (String s) Például: Boolean bobj = new Boolean("True"); Példánymetódusok: String tostring() Például: Double dobj = new Double(6099.8); String s = dobj.tostring(); //s=="6099.8 <type> <type>value() Például: Integer iobj = new Integer(30); int i = iobj.intvalue(); // i==30 double d = iobj.doublevalue(); // d==30.0
Primitív típusok csomagolása 81 Numerikus csomagoló osztályok static final <type> MIN_VALUE = <a típusnak megfelelı érték>; static final <type> MAX_VALUE = <a típusnak megfelelı érték>; Például: System.out.println(Byte.MIN_VALUE); static <type> parse<type>(string s) Például: int i = Integer.parseInt("50"); // i==50
Java csomagok 82 Az osztályok, interfészek csoportosítását a Java nyelvi szinten támogatja, a csomag (package) segítségével A csomagok hierarchikus rendszert alkotnak A csomagnevekben az egyes szinteket pont választja el. Példa: java.io, java.math, stb. A hierarchiaszintek száma tetszőleges lehet
Java csomagok 83 A Java megengedi, hogy két külön csomagban legyen két azonos nevű osztály minősített nevek (qualified name): az azonos nevű osztályok megkülönböztetésére szolgálnak A minősített nevek az osztályt tartalmazó csomag teljes nevéből, és az osztály egyszerű nevéből állnak
Csomagok deklarációja 84 Egy osztályt a package kulcsszó segítségével helyezhetünk el egy csomagban Egy forráskódban csak egy package deklaráció lehet, a forráskód legelején Ha nincs package deklaráció, az adott osztály, vagy interfész a névtelen csomagba kerül Példa: A definiált osztály minősített neve csomag.a lesz
Csomagok leképzése fájlrendszerre 85 A fordítási egységek fájlok.java kiterjesztéssel A csomag, alcsomag nevek könyvtárak, alkönyvtárak Példa: package cs1.cs2.cs3; Mindig a package root alól adjuk ki a fordításhoz/futtatáshoz szükséges parancsokat Példa: Fordítás Futtatás
Osztályok elérése 86 Egy osztályra a definíciójával megegyező csomagban az egyszerű nevével hivatkozhatunk Példa:
Osztályok elérése 87 Egy osztályra a definíciójától eltérő csomagban többféleképpen hivatkozhatunk: Minősített nevek használata (kényelmetlen)
Osztályok elérése 88 Import deklarációk import csomag.osztalynev; import csomag.*; (minden publikus osztályt importálunk) Az import java.lang.*; minden fordítási egységben Az import java.lang.*; minden fordítási egységben automatikusan megtörténik
Könyvészet 89 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.