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

1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.

Hasonló előadás


Az előadások a következő témára: "1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat."— Előadás másolata:

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 Fájlkezelés, IO Adatfolyam alapú megközelítés (amíg van adat olvassuk/amíg van adat írunk, adatfolyam bezárása) InputStream/OutputStream: byte-orientált IO - 8 bites karakter –InputStream: adatforrás-folyam –OutputStream: adatnyelő-folyam Reader/Writer osztályok: karakter-orientált IO (unicode támogatással) - 16 bites karakter Konvertáló osztályok (pl.: InputStreamReader) 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 Standard IO Standard input: System.in Standard output: System.out Standard error: System.err System.out és a System.err közvetlenül használhatók (ahogyan eddig is használtuk őket) Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3

4 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Importálás IO-hoz A java.io csomag tartalmazza az íráshoz/olvasáshoz szükséges osztályokat import java.io.*; Amiket használunk belőle: (API) –BufferedReader –InputStreamReader –FileReader –FileWriter Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4 Bővebben:

5 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Beolvasás billentyűzetről BufferedReader: szöveget olvas a karakter inputstreamről InputStreamReader: byte-okat olvas be, majd karakterré alakítja őket BufferedReader be = new BufferedReader(new InputStreamReader(System.in)); be.read(); be.readLine(); 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 Beolvasás billentyűzetről read() - egyetlen karaktert olvas be, és a karakter ASCII kódjával tér vissza. –int c = be.read(); //q = 113 –char karakter = (char) c; //újra q lesz readLine() - egy sort olvas be, és a beolvasott sztringgel tér vissza –String beolvas = be.readLine(); 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 Beolvasás fájlból BufferedReader FileReader: karakteres fájlokat olvas –konstruktorában egy File objektumot vár –File f = new File(”fajlnev.txt”); readLine() - egy sort olvas be a fájlból BufferedReader be = new BufferedReader(new FileReader(new File(”fajlnev.txt"))); String beolvas = be.readLine(); 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 Kiíratás fájlba FileWriter: karakteres fájlokat ír, egy fájl objektumot vár, ahová ír –megadhatjuk, hogy csak hozzáfűzzön a jelenlegi fájlhoz FileWriter ki = new FileWriter(new File(”textfajl.txt”)); ki.write(”szöveg”); Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8 Példaprogram: Fajlkezeles.java

9 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Megjegyzések Új File objektum létrehozásakor \ helyett \\- t kell használni Windows esetén Kiírásnál sortörés \n helyett operációs rendszer specifikusan: –String s = System.lineSeparator(); IO műveletek végén a streameket le kell zárni minden esetben a close() metódus segítségével Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9 Példaprogram: Fajlkezeles.java

10 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10Szegedi 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: egy olyan probléma, amely meggátolja a futást egy adott metódusban/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ábor10

11 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kivételkezelés kivétel elkapása: –ha valahol kivétel dobódik, akkor feltételezzük, hogy ez valahol el lesz kapva védett régió: –a kód azon része, mely kivételeket hozhat létre try { … } –hibakezelő kód követi: catch(Exception e){ … } 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 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ábor12

13 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Try-catch-finally Egy try blokkhoz több catch blokk is tartozhat ezeket sorba nézzük, mindegyiknél az adott típusú hibát tudjuk elkapni catch(Exception nev) - általános kivételelkapó 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. –nem kötelező de hasznos! 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 Try-catch-finally try {... }catch(ArithmeticException ae) { … }catch(IOException ioe){ … }catch(Exception e){ … } finally { } 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 Exception osztály A kivételek mind az Exception osztályból származnak néhány példa kivételekre: –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ábor15

16 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor RuntimeException azon kivételek őse, amiket 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ábor16

17 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17Szegedi 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: eddig errő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ábor17

18 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor throws kulcsszó Jelezhetjük, hogy egy adott metódus milyen kivételeket dobhat –de ezeket a kivételeket (itt) nem kapom el több kivételt is fel lehet sorolni sok esetben kötelező (ha nincs, fordítási hiba) public void fajlbolOlvasas() throws IOException { … } 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 Saját kivétel létrehozása származtatni kell valamilyen létező kivételosztályból public class SajatKivetel extends Exception { public SajatKivetel(String message){ super(message); } 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 Throw kulcsszó 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 blokk segítségével –ha egyiket se tesszük, fordítási hibát fogunk kapni Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor20

21 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor21Szegedi 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 static void main(String args []) 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ábor21 Példaprogram: SajatKivetel.java, Hiba.java

22 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor22Szegedi 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ábor22

23 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor23Szegedi 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ábor23

24 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor24Szegedi 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ábor24

25 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor25Szegedi 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ábor25 Példaprogram: Lista.java, Lmain.java

26 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor26Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Feladatok Feladat (A megoldáshoz használjuk fel a PrivatEmber, Superman és SMMain osztályokat) –Készíts egy abstract Ember osztályt. –Vidd át a toString metódust az Ember osztályba, majd módosítsd úgy a programot, hogy abstract legyen a toString metódus. –A PrivateEmber osztály öröklődjön az Ember osztályból. –Probáld ki mit csinál az SMMain program, ha a toString metódust kikommentezed! –Definiálj egy Szuperkepessegek interfészt, amelynek van egy void kriptonittalSugároz() függvény osztályban, –Implementáld ezt az interfészt a PrivatEmber osztályban, ahol nem csinál semmit (esetleg kiír valamit a konzolra), de definiáld felül a Superman osztályban úgy, hogy az csökkentse a szupererőt. (Az SMMain futtatóosztály is érdemes módosítani, hogy hívja ezt a függvényt valamilyen módon.) –Helyezd csomagba a privatEmber és a Superman osztályokat. Az SMMain maradjon csomagon kívül.)


Letölteni ppt "1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat."

Hasonló előadás


Google Hirdetések