Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaGyörgy Fazekas Megváltozta több, mint 9 éve
1
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat
2
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Standard IO Standard input: System.in Standard output: System.out System.out.println(”Szöveg”); Standard error: System.err System.err.println(”Szöveg”); System.out és a System.err közvetlenül használhatóak Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2
3
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Beolvasás billentyűzetről java.util.Scanner Különböző típusokat olvashatunk be segítségével –Alapértelmezett bemenetről –Fájlból –Akár Stringből is Scanner sc = new Scanner(System.in); int i = sc.nextInt();//egész beolvasása String str = sc.next();//String beolvasása Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3 http://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
4
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kivételkezelés Nem derül ki minden hiba a fordítás folyamán (IO műveletek, felhasználói interakció, stb.) Kivétel (exception): egy olyan probléma, amely meggátolja a futást egy adott metódusban vagy blokkban ( pl.: null referencia) Kivétel dobása: –a program végrehajtása megáll, kivétel dobódik –a kivételkezelő mechanizmus keres egy megfelelő kivételkezelőt –a kivételkezelő lekezeli a hibát, a program fut tovább Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4
5
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kivételkezelés Kivétel elkapása: –ha valahol kivétel dobódhat, akkor feltételezzük, hogy ez valahol el lesz kapva Védett régió: –a kód azon része, amely kivételeket hozhat létre, ezt try blokkal jelezzük. try { … } –hibakezelő kód követi: catch(Exception e){ … } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5
6
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kivételkezelés try { //Veszélyes kódrészlet, amely kivételt dobhat int a = 500; int b = 0; int c = (a/b)*5; }catch(ArithmeticException ae) { //Elkaptuk a kivételt, mi történjen? ae.printStackTrace(); } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6
7
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Try-catch-finally Egy try blokkhoz több catch blokk is tartozhat –ezeket sorban megvizsgálja; mindegyik catch blokk adott típusú kivételt tud elkapni –a legelső catch el is kapja, amelyik képes rá át kell gondolni a catch blokkok sorrendjét catch(Exception nev) –általános kivételelkapó, ritkán használjuk! –minden kivételt elkap Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7
8
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Try-catch-finally A try-catch blokkok után még készíthetünk egy finally blokkot is A finally blokk tartalma mindenképpen lefut, függetlenül attól, hogy keletkezett-e hiba, vagy sem –Itt érdemes lezárni adatbázis kapcsolatot, megnyitott fájlokat, stb. –Használata nem kötelező de hasznos! Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8
9
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Try-catch-finally try {... }catch(ArithmeticException ae) { … }catch(IOException ioe){ … }catch(Exception e){ … } finally { } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9
10
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Exception osztály Minden kivétel az Exception osztályból származnak néhány példa: –ArithmeticException (pl.: nullával való osztás) –ArrayIndexOutOfBoundsException (tömbindexelés) –IllegalArgumentException –IOException (IO műveletekkel kapcsolatos) –SQLException –NullPointerException –ClassNotFoundException Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10
11
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor RuntimeException azon kivételek őse, melyeket a virtuális gép dobhat a normál működése közben ezen osztályból származó kivételeket nem feltétlen kell elkapni, mert ha bekövetkeznek, akkor se tudunk sok mindent kezdeni velük (a program meghal) ilyen pl. a NullPointerException, ArrayIndexOutOfBoundsException Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11
12
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Throwable osztály Az Object osztályból származik ez az osztály is Két leszármazottja van –Exception: kivételek, eddig ezekről volt szó –Error: fordítási időbeni és rendszerhibák, ezekkel általában nem kell foglalkozni Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12
13
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor throws kulcsszó Ha egy metódus kivételt dobhat, akkor azt a throws kulcsszóval jelezhetjük Jelentése: a metódusban az adott kivétel nincs lekezelve, ezzel a hívó kódrészlet foglalkozik Több kivételt is fel lehet sorolni Sokszor kötelező (ha nincs, fordítási hiba) public void fajlbolOlvasas() throws IOException { … } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13
14
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Saját kivétel létrehozása származtatni kell valamilyen létező kivételosztályból (pl.: Exception osztályból) public class SajatKivetel extends Exception { public SajatKivetel(String message){ super(message); } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14
15
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor throw kulcsszó Nem ugyanaz, mint a throws!!!! kivételt dobhatunk vele manuálisan –pl.: if( x < 0 ) { throw new SajatKivetel(”X negatív szám”); } Ha saját kivételt dobunk, akkor jeleznünk kell a throws kulcsszóval, vagy try-catch blokkba kell tennünk a kódrészt –ha egyiket se tesszük, fordítási hibát fogunk kapni Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15
16
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor throws vs. throw throws: –metódus fejlécében jelezzük, hogy az adott metódus milyen hibákat dobhat throw: –a kódban egy helyen konkrétan dobunk egy hibát public void foo() throws SajatKivetel { int a=3; int b=0; if (b==0){ throw new SajatKivetel("Nulla az osztó"); } else{ System.out.println((double)a/b); } } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16 Példaprogram: SajatKivetel.java, Hiba.java
17
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Belső osztályok Osztályon vagy metóduson belüli osztályok Cél: máshol nem használt algoritmusok teljes elrejtése A belső osztályból elérhetőek a „körülvevő” osztály elemei: –kivéve ha a belső osztály static Egy (nem belső) osztály láthatósága csak public vagy package private lehet, a belső osztály viszont ezen felül lehet private, protected, sőt static is nem kell őket külön fordítani Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17
18
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Belső osztályok Osztályon belüli belső osztály: public class Kulso {.. private class Belso{ … } … } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18
19
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor19Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Belső osztályok metóduson belüli belső osztály: public void csinalValamit() { … private class Belso() { … } … } Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor19
20
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor20Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Belső osztály példányosítása A tartalmazón belül ugyanúgy, mint eddig A tartalmazón kívülről: Kulso.Belso peldany = new Kulso.Belso(); csak nem statikus belső osztály esetén: Kulso peldanyKulso = new Kulso(); Kulso.Belso peldanyBelso = peldanyKulso.new Belso(); Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor20 Példaprogram: Lista.java, Lmain.java
21
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor21Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Feladat Közösen: hozzunk létre egy láncolt lista tárolására alkalmas osztályt. Tároljuk az aktuális elem értékét (legyen egész), valamint mutassunk a következő elemre. Valósítsuk meg a beszúró és törlő műveleteket (lista elejére beszúr, lista elejéről töröl) toString() metódusban valósítsuk meg a lista elemenkénti kiíratását. Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor21
22
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor22Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Önálló feladat Hozz létre egy fix méretű vermet egész számok tárolására (tömb segítségével) és valósítsd meg a push/pop műveleteket. Írj egy futtatható osztályt, mely a Main metódusban „push” vagy „pop” utasításokat vár a konzolról. Ha pop utasítást kap, hajtsa végre azt, és írja ki a konzolra a kivett elemet. Push utasítás esetén egy egész számnak kell következnie, ezt tegye be a verembe. Írj meg egy kivételosztályt, amit a fenti függvények (push/pop) akkor dobnak, ha a verem megtelt vagy üres. Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor22
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.