Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.

Hasonló előadás


Az előadások a következő témára: "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat."— Előadás másolata:

1 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat

2 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Standard IO  Standard input: System.in  Standard output: System.out  Standard error: System.err  System.out és System.err közvetlenül használhatóak

3 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Beolvasás billentyűzetről  java.util.Scanner  Különböző típusokat olvashatunk egy adott forrásból (pl. alapértelmezett bemenetről) Scanner sc = new Scanner(System.in); int i = sc.nextInt(); //primitív típusok támogatva String str = sc.next(); //String beolvasása

4 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés  A fordítás során nem derülhet ki minden hiba (IO műveletek, felhasználói interakciók, stb.)  Kivétel (exception): egy olyan probléma, amely meggátolja a futást egy adott metódusba, vagy blokkban  Pl. null referenciára hivatkozás  Kivétel keletkezésekor:  Az adott kódrész végrehajtása megáll, kivétel dobódik  A kivételkezelő mechanizmus megpróbál keresni egy megfelelő kivételkezelőt  Ha található, az lekezeli a hibát, a program futhat tovább. Különben a program teljes végrehajtása megállhat.

5 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés  Kivétel elkapása:  Ha valahol kivétel dobódhat, az jó esetben máshol el is lesz kapva  Védett régió:  A kód azon része, mely kivételeket hozhat létre. try blokkal jelezhetjük  try { … }  Hibakezelő kód követi:  catch(Exception e) { … }

6 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés  Pl: 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(); }

7 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés  Egy try blokkhoz több catch blokk is tartozhat  Ezeknél jelezzük, hogy az adott blokk milyen típusú kivételt tud elkapni  catch (Exception e) – általános (bármely) kivételt elkapja, használata nem ajánlott!  try blokk végére finally blokkot is helyezhetünk. Ennek tartalma mindenképp lefut (akár volt hiba, akár nem).  Itt érdemes lezárni kapcsolatokat, nyitt fájlokat…  Nem kötelező a használata, de általában ajánlott

8 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés try {... } catch (ArithmeticException ae) { … } catch (IOException ioe){ … } catch (Exception e){ … } finally { }

9 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Exception osztály  Minden kivétel az Exception osztályból származik  Pl:  ArithmeticException (pl. 0-val osztás)  ArrayIndexOutOfBoundsException (tömb indexelés)  IllegalArgumentException  IOException  NullPointerException  ClassNotFoundException

10 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS RuntimeException  Azon kivételek őse, melyeket a virtuális gép dobhat működés közben.  Az ebből származó kivételeket nem szokás elkapni. Ha ilyet kapunk, az jó eséllyel programozási hiba következménye.  NullPointerException  ArrayIndexOutOfBoundsException

11 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS RuntimeException  Azon kivételek őse, melyeket a virtuális gép dobhat működés közben.  Az ebből származó kivételeket nem szokás elkapni. Ha ilyet kapunk, az jó eséllyel programozási hiba következménye.  NullPointerException  ArrayIndexOutOfBoundsException

12 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Throwable  Object osztályból származik (mint minden…)  Két leszármazottja:  Exception: eddig ezekről volt szó (kivételek)  Error: fordítási időbeni és rendszerhibák. Ezeket általában nem kell lekezelni (fordítási hibát pl. a program kijavításával kezelhetjük le, nem kivételkezeléssel).

13 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Throws  Ha egy metódus kivételt dobhat, throws kulcsszóval jelezhetjük ezt.  Jelentése: az adott kivétel a metódusban nincs lekezelve, a metódust hívó programrésznek kell vele foglalkoznia.  Több kivételt is fel lehet sorolni  Sokszor kötelező (fordítási hibát okozhat, ha nem írjuk ki) public void fajlbolOlvasas() throws IOException { … }

14 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Sajtát típusú kivétel  Származtatni kell egy kivételből. Bármely (általában az Exception) osztályból származhat. public class SajatKivetel extends Exception { public SajatKivetel(String message){ super(message); }

15 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Throw  Nem ugyanaz, mint a throws!!!  Kivételt dobhatunk vele „manuálisan”  Pl. if (x < 0) { throw new SajatKivetel(„X negatív szám”); }  Ha throw segítségével kivételt dobhat a metódusunk, azt vagy kötelezően jelezni kell a throws kulcsszóval…  Vagy try-catch blokkba tehetjük az adott kódrészletet (ez ritkább eset)  Különben fordítási hiba

16 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS throw vs. throws  Throws: metódus fejlécében jelezzük, milyen hibákat dobhat.  Throw: a kódrészletben valahol konkrétan dobunk egy kivételt. 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); } } Példaprogram pubban: SajatKivetel.java, Hiba.java

17 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Belső osztályok  Osztályon vagy metóduson belül is létrehozhatunk osztályokat.  Célja, hogy az egyedileg használt algoritmusokat elrejtsük más osztályok elől.  A belső osztályból elérhetőek a külső osztály elemei, kivéve ha a belső osztály static!  Egy külső osztály láthatósága csak public vagy package private lehet. A belső osztályé viszont bármi, sőt, akár statikus is lehet!  Nem kell külön fordítani a belső osztályokat.

18 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Belső osztályok  Osztályon belüli osztály: public class Kulso {.. private class Belso{ … } … }

19 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Belső osztályok  Metóduson belüli osztály: public void ezEgyMetodus() {.. private class Belso{ … } … }

20 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Belső osztály példányosítása  A tartalmazó osztályon belül ugyanúgy, mint eddig.  A tartalmazón kívül (ha elérhető az osztály láthatóság alapján): Kulso.Belso peldany = new Kulso.Belso();  Ha nem statikus a belső osztály, objektum példányon keresztül hozható létre: Kulso peldanyKulso = new Kulso(); Kulso.Belso peldanyBelso = peldanyKulso.new Belso();

21 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Feladat (közösen)  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 (egyelőre csak egész számokat, jövő órán kiegészítjük generikus megoldással), 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.

22 UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Feladat (plusz pontért)  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. D Í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.


Letölteni ppt "UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat."

Hasonló előadás


Google Hirdetések