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

Fájlkezelés, IO Kivételkezelés Belső osztályok.

Hasonló előadás


Az előadások a következő témára: "Fájlkezelés, IO Kivételkezelés Belső osztályok."— Előadás másolata:

1 Fájlkezelés, IO Kivételkezelés Belső osztályok

2

3  adatfolyam alapú megközelítés (stream-ek)  InputStream/OutputStream: byte-orientált IO ◦ InputStream: adatforrás-folyam ◦ OutputStream: adatnyelő-folyam  Reader/Writer osztályok: karakter-orientált IO unicode támogatással ◦ konvertáló osztályok (pl. InputStreamReader)

4  standard input: System.in  standard output: System.out  standard error: System.err  a System.out és a System.err közvetlenül használhatók (ahogyan eddig is használtuk őket)

5  importálnunk kell: import java.io.*;  amiket általában használunk belőle (az API- ban utánuk lehet nézni bővebben): ◦ BufferedReader ◦ InputStreamReader ◦ FileReader ◦ FileWriter

6  BufferedReader: szöveget olvas a karakter input-streamről  InputStreamReader: byte-okat olvas, majd karakterekké alakítja őket BufferedReader be = new BufferedReader(new InputStreamReader(System.in)); be.read(); be.readLine();

7  read(): egyetlen karaktert olvas be, és az ASCII kódjával tér vissza  readLine(): egy sort olvas be, és a beolvasott sztringgel tér vissza

8  FileReader: karakteres fájlokat olvas ◦ konstruktorában egy File objektumot vár  readLine(): egy sort olvas be a fájlból BufferedReader be = new BufferedReader(new FileReader(new File(”fajlnev.txt”))); be.readLine();

9  FileWriter: karakteres fájlokat ír ◦ szintén át kell adnunk neki egy File objektumot FileWriter ki = new FileWriter(new File(”uj.txt”)); ki.write(”szöveg”);  az IO műveletek végén a stream-eket zárjuk le! ◦ be.close(); ◦ ki.close();

10  Fajlkezeles.zip (honlapomon)

11

12  nem derül ki minden hiba a fordítás során  kivétel: egy probléma, mely meggátolja a futást egy adott metódusban/blokkban ◦ pl. null referencia  kivétel dobása: ◦ az aktuális 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ása folytatódik

13  kivétel elkapása: ◦ ha valahol kivétel dobódik, akkor feltételezzük, hogy az valahol el lesz kapva  védett régió: ◦ a kód azon része, mely kivételeket hozhat létre ◦ hibakezelő kód követi try{ … } catch{ … }

14 try { … } catch (NullPointerException e) { … } „veszélyes kód”: kivételt dobhat mi történjen, ha elkaptuk a kivételt?

15  a kivételek mind az Exception osztályból származnak  néhány példa kivételekre: ◦ ClassNotFoundException ◦ DataFormatException ◦ IOException ◦ SQLException ◦ ArithmeticException (pl. nullával osztás) ◦ ArrayIndexOutOfBoundsException (tömbindexelési hibák) ◦ FileNotFoundException ◦ RuntimeException ◦ …

16  több catch blokk is lehet try {... } catch (ArithmeticException e){ … } catch (IOException e){ … } catch (Exception e){ … } finally { … }  sorba nézzük a catch ágakat, mindegyiknél az adott hibát tudjuk elkapni amit a finally-ba írok, az mindenképpen lefut (függetlenül attól, dobódik-e kivétel vagy nem)

17  catch (Exception e): általános kivételelkapó  a finally ág nem kötelező, de hasznos lehet stream-ek vagy kapcsolatok lezárásához, mert így mindenképpen lezárjuk őket ◦ pl. ki.close();

18  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ünk (a program úgyis meghal)  ilyen pl. a NullPointerException, ArrayIndexOutOfBoundsException

19  az Object osztályból származik ez is  két leszármazottja van: 1.Exception: erről volt szó eddig 2.Error: fordítási időbeni- és rendszerhibák, ezekkel általában nem kell foglalkozni

20  ezzel jelzem, hogy valami (általában metódus) dobhat kivételt, viszont a kivételt nem kapom el (vagy máshol kapom el) public void beolvas() throws IOException{ }  sok esetben le sem lehet fordítani a programot a throws nélkül

21  származtatni kell valamilyen létező kivétel osztályból public class SajatKivetel extends Exception{ public SajatKivetel(String message){ super(message); }

22  kivételt dobhatunk vele (manuálisan) ◦ Pl.: if (x<0) throw new SajatKivetel(„X negatív.”);  ne keverjük a throws kulcsszóval, ami annak jelzésére szolgál, hogy egy metódus milyen kivételt dobhat!  ha saját kivételt dobunk, azt jeleznünk kell a „throws” kulcsszóval, vagy try-catch segítségével kell lekezelni ◦ ha egyiket se tesszük, fordítási hibát fogunk kapni

23 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((float)a/b); } jelezzük, hogy dobhat ilyen kivételt b=0 esetén ténylegesen dobjuk is a kivételt

24  SajatKivetel.java (pub, 8. gyakorlat)  Hiba.java (pub, 8. gyakorlat)

25

26  osztályon vagy metóduson belüli osztályok  cél: máshol nem használt algoritmus teljes elrejtése  a belső osztályból elérhetők 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

27  osztályon belüli belső osztály: public class Kulso{ … private class Belso{…} … }

28  metóduson belüli belső osztály: public void csinalValamit(){ … private class Belso(){…} … }

29  a tartalmazón belül ugyanúgy, mint eddig  a tartalmazón kívülről: Kulso.Belso peldany = new Kulso.Belso();  csak nemstatikus belső osztály esetén: Kulso peldanyKulso = new Kulso(); Kulso.Belso púeldanyBelso = peldanyKulso.new Belso();

30  Lista.java (pub, 8. gyakorlat)  Lmain.java (pub, 8. gyakorlat)

31  pub: 8. gyakorlathoz tartozó feladatok.txt

32  szerda éjfélig küldhető el 3 pluszpontért nekem ben Feladat:  Írj három saját hiba osztályt: mindegyik származzon az Exception osztályból, legyen default és paraméteres konsturktoruk is, ezekben az Exception osztály default, valamint az 1 db String argumentumot váró konstruktorát hívd meg o az egyik az InvalidYearException osztály: a default konstruktorban az "Érvénytelen évszám!„ szöveget add át az ős konstruktorának, a paraméteresben értelemszerűen a kapott String típusú paramétert o Legyen ugyanilyen módon létrehozva az InvalidCitizenshipException és a TooLongNameException osztály is (itt a default konstruktor a "Nem magyar állampolgár„ és a „Túl hosszú a név!” szövegeket adja át az ős konstruktorának) o Mindhárom osztály kerüljön a kivetelkezeles, azon belül a sajatkivetelek csomagba

33  Írj egy Állampolgár osztályt, legyen a kivetelkezeles csomagban: adattagjai az adószám (egész), a név, az évszám (egész szám) és az állampolgárság (String, pl. „magyar”, „német”…) o Írj hozzá paraméteres konstruktort, mely 4 paramétert vár. A konstruktorban ellenőrizd: o hogy az évszám pozitív-e, ha nem, akkor dobj InvalidYearExceptiont o hogy a név hossza nagyobb-e 35-nél, ha igen, akkor dobj TooLongNameExceptiont a következő szöveggel: "A név túl hosszú: x karakter. Maximum 35 karakter lehet.„ (x nyilván az aktuálisan átadott paraméter hossza) o hogy az állampolgárság értéke a „magyar”-e, amennyiben nem, dobj InvalidCitizenshipExceptiont a következő szöveggel: "Hiba: az adatbázis csak magyar állampolgárságú személyek adatait tartalmazhatja!„ o Írj hozzá getter-setter metódusokat, a fentebb említett ellenőrzések a megfelelő setterekben is történjenek meg, valamint a hibadobás is

34 o A hibadobást jelezd a throws kulcsszó segítségével a megfelelő metódusok deklarációjában, a hibát elkapni az osztályban sehol sem kell  Írj egy KivételPélda osztályt, legyen ez is a kivetelkezeles csomagban: o Próbálj létrehozni állampolgár objektumokat, valamint a setterek segítségével átállítani az adattagjaikat (ez veszélyes kód, kezeld ennek megfelelően) o A keletkező hibákat kapd el, és az e.printStackTrace() hívásával írasd ki a konzolra a megfelelő információkat a hibáról o Ne felejtsd el importálni a saját hiba osztályaidat!


Letölteni ppt "Fájlkezelés, IO Kivételkezelés Belső osztályok."

Hasonló előadás


Google Hirdetések