Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Hasonló dokumentumok
7. K: JAVA alapok Konzultáció

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

OOP: Java 8.Gy: Gyakorlás

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

4. Gy: JAVA osztályok

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java programozási nyelv 9. rész Kivételkezelés

OOP: Java 4.Gy: Java osztályok

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

Objektumorientált programozás C# nyelven

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Kivételkezelés, naplózás. Exception handling, logging

Kivételkezelés a C++ nyelvben Bevezetés

OOP: Java 1.Gy: Java alapok

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Programozási nyelvek II.: JAVA

Java gyakorlat feladatai e s megolda sai ( )

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Java Programozás 11. Ea: MVC modell

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

OOP: Java 7.Gy: Öröklődés, referenciák

Globális operátor overloading

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Szoftvertechnolo gia gyakorlat

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

BME MOGI Gépészeti informatika 4.

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek Java

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Objektum Orientált Programozás. 6. JAVA öröklődés 30/1B IT MAN

Java programozási nyelv 6. rész Java a gyakorlatban

Kivételek, kivételkezelés a C++ nyelvben

Segédanyag: Java alkalmazások gyakorlat

Programozás I. Második ZH segédlet

Java programozási nyelv 4. rész Osztályok II.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Szoftvertechnológia alapjai Java előadások

Java és web programozás

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Programozási nyelvek Java

Segédanyag: Java alkalmazások gyakorlat

Programozás II. labor

BME MOGI Gépészeti informatika 8.

Pénzügyi algoritmusok

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Objektumorientált programozás C# nyelven III.

Java és web programozás

Programozás I. Második ZH segédlet

Programozási technológia

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Objektumorientált programozás C# nyelven III.

Informatika terméktervezőknek

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Programozási nyelvek II.: JAVA, 4. gyakorlat

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

INFORMATIKAI ALAPISMERETEK

Java Programozás 5. Ea: OOP alapok. Abstract Javaságok

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )

Java Programozás 3. Gy: Java GUI. Swing, AWT

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

3. Osztályok II. Programozás II

A C# programozási nyelv alapjai

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

Programozási nyelvek II.: JAVA

Magas szintű programozási nyelvek 2 Előadás jegyzet

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

1. Jelölje meg az összes igaz állítást a következők közül!

Java programozási nyelv

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Kalapácsvetés 2016 szöveges

Programozás I. Első ZH segédlet

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei

Java programozási nyelv 5. rész Osztályok III.

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Szoftvertechnológia alapjai Java előadások

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

JAVA PROGRAMOZÁS 2.ELŐADÁS

Imperatív programozás

Programozási nyelvek Java

OOP és UML Áttekintés

Átírás:

Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN

Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése. Az ilyen hibákat a Java platformon Exception-nek (kivételnek) nevezik. Két fő csoportjuk van: a futási időben és a nem futási időben keletkezett kivételek. Futásidejű kivételek az aritmetikai (pl. nullával való osztás), az indexeléssel kapcsolatos (pl. tömb nem létező eleméhez való hozzáférés), és a referenciával kapcsolatos (pl. objektumokra való hivatkozás) kivételek. Ezeket a kivételeket nem kötelező implementálni, de erősen ajánlott. 44/2 B IT MAN

Pici elmélet Nem futásidejű kivételek a Java rendszerén kívül keletkeznek. Ilyenek az I/O műveletek során keletkező hibák (pl. a fájl nem található). Ezeket a kivételeket kötelező lekezelni. Amikor a kód futása során valamilyen hiba lép fel (pl. nullával való osztás, indexhatár túllépése ), akkor egy kivételobjektum (egy kivételosztály példánya) jön létre. Ez az objektum olyan információkat tartalmaz a kivétel fajtájáról és a program aktuális állapotáról, amelyeket a kivétel lekezelésekor felhasználhatunk. A kivételobjektum létrehozását és a futtatórendszer által történő lekezelését kivételdobásnak hívjuk. 44/3 B IT MAN

Kód belépési pont try { X kód, ami kiválthat egy kivételt catch ( Kivétel típusa Azonosító ) { Kód kilépési pont kód, ami lekezel egy kivételt 44/4 B IT MAN

Pici elmélet A védett kódot try blokkban helyezzük el: try { utasítások Az első kivételt kiváltó utasítással befejeződik a try blokk végrehajtása, létrejön egy kivétel objektum. Fontos: a try blokk kivételt kiváltó utasítása utáni utasítások tehát mindig kimaradnak! try { X kód, ami kiválthat egy kivételt további utasítások catch ( Kivétel típusa Azonosító ) { 44/5 B IT MAN

Pici elmélet A kivétel lekezelését szolgáló utasítások catch blok(kok)ban helyezkednek el. catch (típus, azonosító) { utasítások A catch minden esetben a try blokkot követi, nem lehet köztük más utasítás. Egy try blokkhoz tartozhat több catch is. Mindig a szűkebb kivételt követi a bővebb kivétel lekezelése. catch ( Kivétel típusa Azonosító ) { kód, ami lekezel egy kivételt catch ( Kivétel típusa Azonosító ) { 44/6 B IT MAN kód, ami lekezel egy kivételt

Pici elmélet finally: A cacth(ek) után szerepelhet. Az utolsó catch blokk és a finally blokk között nem lehet más utasítás. Minden esetben lefut: Ha kivétel keletkezett a try blokkban, egy catch blokk végrehajtása után. Ha nem volt kivétel, a try blokk utolsó utasítása után. try { X catch ( Kivétel típusa Azonosító ) { finally { kód, ami kiválthat egy kivételt kód, ami lekezel egy kivételt kód, ami mindig lefut 44/7 B IT MAN

Pici elmélet A kivétel objektum adatai kiírathatók: getclass() metódus: mely visszaad egy sztringet, ami a kivétel osztály azonosítóját tartalmazza, getmessage() metódus: visszaadja a kivételt kiváltó sztringet, tostring() metódus: mely visszaad egy sztringet, ami a kivétel osztály azonosítójából és a kivételt kiváltó sztringből áll. printstack() metódus: kiírja a keletkezett kivételeket, a keletkezésük sorrendjében és megadja a keletkezésük helyét. 44/8 B IT MAN

Feladatok 1. Készítsen egy futtatható osztályt, amelyben beolvas a konzolról egy egész számot és kiírja. Kezelje az esetlegesen felmerülő hibákat kivételkezeléssel. JavaKiv1.java Hibakezelés nélkül import java.util.scanner; public class JavaKiv1 { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.println("Kérek egy osztályzatot: "); String s1 = sc.nextline(); int jegy = Integer.parseInt(s1); System.out.println("Az osztályzat: "+jegy); 44/9 B IT MAN

Kérek egy osztályzatot: r5 Konzol Exception in thread "main" java.lang.numberformatexception: For input string: "r5" at java.lang.numberformatexception.forinputstring(unknown Source) at java.lang.integer.parseint(unknown Source) at java.lang.integer.parseint(unknown Source) at JavaKiv1.main(JavaKiv1.java:9) 44/10 B IT MAN

JavaKiv1.java Hibakezeléssel import java.util.scanner; public class JavaKiv1 { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.println("Kérek egy osztályzatot: "); String s1 = sc.nextline(); try { int jegy = Integer.parseInt(s1); System.out.println("Az osztályzat: "+jegy); catch (NumberFormatException nfe) { System.out.println("Hiba: "+nfe.getmessage()); //System.out.println("Hiba: "+nfe); //nfe.printstacktrace(); 44/11 B IT MAN

Konzol nfe.getmessage() Kérek egy osztályzatot: f5 Hiba: For input string: "f5" Konzol nfe Kérek egy osztályzatot: f5 Hiba: java.lang.numberformatexception: For input string: "r5" Konzol nfe.printstacktrace() Kérek egy osztályzatot: r5 java.lang.numberformatexception: For input string: "r5" at java.lang.numberformatexception.forinputstring(unknown Source) at java.lang.integer.parseint(unknown Source) at java.lang.integer.parseint(unknown Source) at JavaKiv1.main(JavaKiv1.java:8) 44/12 B IT MAN

2. Készítsen egy futtatható osztályt, amelyben beolvas a konzolról egy egész számot és kiírja. Hiba esetén írjon ki üzenetet a kezelőnek, és újra kérje a számot. JavaKiv2.java import java.util.scanner; public class JavaKiv2 { public static void main(string[] args) { Scanner sc = new Scanner(System.in); int jegy =0; boolean kesz = false; do { try { System.out.println("Kérek egy osztályzatot: "); String s1 = sc.nextline(); jegy = Integer.parseInt(s1); System.out.println("Az osztályzat: "+jegy); kesz = true; catch (NumberFormatException nfe) { System.out.println("Nem megfelelő adat! Próbáld újra!"); while (!kesz); 44/13 B IT MAN

Konzol Kérek egy osztályzatot: r5 Nem megfelelő adat! Próbáld újra! Kérek egy osztályzatot: 3.8 Nem megfelelő adat! Próbáld újra! Kérek egy osztályzatot: 18 Az osztályzat: 18 44/14 B IT MAN

Pici elmélet Saját kivétel osztály: Az Exception leszármazotja legyen. Név konvenció! (ValamiException) A konstuktorának a paraméterei között legyen egy String, amivel az ősosztály konstruktorát hívja meg. A metódusai a catch blokkban használhatók a kivétel lekezelése során. public class PeldaException extends Exception { public PeldaException(String a) { super(a); 44/15 B IT MAN

Pici elmélet A kivétel megdobása (kiváltása), elkapása: public class proba2 { public static void main(string[] args) { try { throw new PeldaException("Leiras"); catch (PeldaException e){ System.out.println(e.getMessage()); 44/16 B IT MAN

Feladatok 3. Készítsen egy SkKiv nevű saját kivétel osztályt: - Adattag: jegy, amely egy beolvasott osztályzatot tárolja, - Metódus: tostring, adja vissza: 'Nem érvényes osztályzat: ' Készítsen egy futtatható osztályt, amelyben beolvas a konzolról egy egész számot és kiírja. Kezelje a következő kivételeket: - Az osztályzat nem lehet 1-től kisebb! - Az osztályzat nem lehet 5-től nagyobb! - Az osztályzatnak egész számnak kell lennie. Hiba esetén írjon ki üzenetet a kezelőnek, és kérje újra a számot. 44/17 B IT MAN

SkKiv osztály SkKiv.java public class SkKiv extends Exception{ int jegy; public SkKiv(int jegy, String uzenet){ super (uzenet+" Beolvasott érték: "+jegy); this.jegy = jegy; public String tostring(){ return "Nem érvényes osztályzat: "; 44/18 B IT MAN

JavaKiv3.java (2/1) import java.util.scanner; public class JavaKiv3 { public static void main(string[] args) { Scanner sc = new Scanner(System.in); int jegy =0; boolean kesz = false; do { try { System.out.println("Kérek egy osztályzatot: "); String s1 = sc.nextline(); jegy = Integer.parseInt(s1); if (jegy < 1) throw new SkKiv(jegy, "A jegy nem lehet 1-től kisebb!"); if (jegy > 5) throw new SkKiv(jegy, "A jegy nem lehet 5-től nagyobb!"); System.out.println("Az osztályzat: "+jegy); kesz = true; catch (SkKiv ske) { 44/19 B IT MAN

JavaKiv3.java (2/1) catch (SkKiv ske) { System.out.println(ske+ske.getMessage()); catch (NumberFormatException nfe) { System.out.println("Nem megfelelő adat! Próbáld újra!"); while (!kesz); 44/20 B IT MAN

Konzol Kérek egy osztályzatot: 8 Nem érvényes osztályzat: A jegy nem lehet 5-től nagyobb! Beolvasott érték: 8 Kérek egy osztályzatot: 0 Nem érvényes osztályzat: A jegy nem lehet 1-től kisebb! Beolvasott érték: 0 Kérek egy osztályzatot: 2.5 Nem megfelelő adat! Próbáld újra! Kérek egy osztályzatot: a+ Nem megfelelő adat! Próbáld újra! Kérek egy osztályzatot: 4 Az osztályzat: 4 44/21 B IT MAN

Feladatok 4. Tároljunk be számokat egy szöveges tömbbe, legyen benne hibás is. Próbáljuk berakni a számokat egy egész típusú tömbbe, aztán írassuk ki a tömb adatait a képernyőre. Alkalmazzunk hibakezelést ott, ahol szükséges. 44/22 B IT MAN

JavaKiv4.java public class JavaKiv4 { public static void main(string[] args) { int j=0; String [] tk = {"12", "34", "a56", "78", "90", "123"; Integer [] egesz = new Integer[5]; for (j=0; j<6; j++) System.out.println(tk[j]); System.out.println("==============="); for (j=0; j<5; j++) { egesz[j] = new Integer(tk[j]); System.out.println("==============="); for (j=0; j<6; j++) { System.out.println(Integer.valueOf(egesz[j])); 44/23 B IT MAN

Konzol 12 34 a56 78 90 123 Exception in thread "main" =============== java.lang.numberformatexception: For input string: "a56" at java.lang.numberformatexception.forinputstring(unknown Source) at java.lang.integer.parseint(unknown Source) at java.lang.integer.<init>(unknown Source) at JavaKiv4.main(JavaKiv4.java:11) 44/24 B IT MAN

JavaKiv4.java (Kódrészlet!) System.out.println("==============="); for (j=0; j<5; j++) { try { egesz[j] = new Integer(tk[j]); catch (NumberFormatException nf) { System.out.println(j+1 +". adat hibás: "+tk[j]); System.out.println("==============="); for (j=0; j<6; j++) { System.out.println(Integer.valueOf(egesz[j])); 44/25 B IT MAN

Konzol 12 34 a56 78 90 123 =============== 3. adat hibás: a56 =============== 12 34 Exception in thread "main" java.lang.nullpointerexception at JavaKiv4.main(JavaKiv4.java:16) 44/26 B IT MAN

JavaKiv4.java (Kódrészlet!) System.out.println("==============="); for (j=0; j<6; j++) { try { System.out.println(Integer.valueOf(egesz[j])); catch (NullPointerException np) { System.out.println(j+1 + ". elemnek nincs értéke!"); 44/27 B IT MAN

Konzol 34 a56 78 90 123 =============== 3. adat hibás: a56 =============== 12 34 3. elemnek nincs értéke! 78 90 java.lang.arrayindexoutofboundsexception: 5 at JavaKiv4.main(JavaKiv4.java:17) 44/28 B IT MAN

JavaKiv4.java (Kódrészlet!) System.out.println("==============="); for (j=0; j<6; j++) { try { System.out.println(Integer.valueOf(egesz[j])); catch (NullPointerException np) { System.out.println(j+1 + ". elemnek nincs értéke!"); catch (ArrayIndexOutOfBoundsException ob) { System.out.println(j+1 +". index a tömb méretén kívül!"); 44/29 B IT MAN

Konzol 12 34 a56 78 90 123 =============== 3. adat hibás: a56 =============== 12 34 3. elemnek nincs értéke! 78 90 6. index a tömb méretén kívül! 44/30 B IT MAN

Már megint lefagyott a Windows!! Menjetek gyerekek, segítsetek apátoknak megnyomni a CTRL + ALT + DEL-t! 44/31 B IT MAN

44/32 B IT MAN

44/33 B IT MAN

44/34 B IT MAN

44/35 B IT MAN

44/36 B IT MAN

44/37 B IT MAN

44/38 B IT MAN

44/39 B IT MAN

44/40 B IT MAN

44/41 B IT MAN

44/42 B IT MAN

44/43 B IT MAN

VÉGE VÉGE 44/44 B IT MAN