Kivételkezelés.

Slides:



Advertisements
Hasonló előadás
© Kozsik Tamás Különböző nyelvekhez igazítás Internationalization - i18n.
Advertisements

4. alkalom – Hálózat Kezelés
Osztály leszármaztatás
AZ OOP ALAPJAI.
Jt Java Feltételek, logikai kifejezések. jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró.
A Java programozási nyelv
Hibakezelés és Tesztelés a Visual Studio.NET-ben
Öröklődés 2..
HADOOP Korszerű Adatbázisok Elérés, Belépés Elérés: eszakigrid109.inf.elte.hu Belépés: felhasználó/jelszó: neptun-kód Manager oldalak:
© Kozsik Tamás JavaBeans Nagyon divatos technológia Nem tévesztendő össze az Enterprise Java Beans technológiával Programozási konvenciók gyűjteménye.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Fejlett Programozási Technikák 2.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A Java programozási nyelvSoós Sándor 1/24 Java programozási nyelv 9. rész – Kivételkezelés Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
C# tagfüggvények.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
SPRING FRAMEWORK bemutatása
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Készítette: Keszthelyi Zsolt
Csomagok.
© Kozsik Tamás 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.
Kivételkezelés a C++ nyelvben Bevezetés
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Programozási nyelvek összehasonlító elemzése
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Java programozási nyelv Filekezelés
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Java programozási nyelv Adatbekérés konzolról
Programozás III KIVÉTEL.
Programozás III CSOMAG. CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Kivételek kezelése, ellenőrzött adatbevitel Czigléczky Gábor 2009.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hálózatkezelés Java-ban
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Thread és Task.
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Kivételkezelés

Kivétel fogalma Kivételnek nevezzük a program abnormális működése során megjelenő (kivételes) eseményeket. Például: Nem létező fájl megnyitása Nullával való osztás Négyzetgyökvonás negatív számból Rossz felhasználói akció Saját kivétel

Saját kivétel Egyszerűsíti a munkát A hasonló kivételeket egy helyen tudjuk lekezelni Szimulálni tudunk „szabványos” kivételeket Pl: az életkor nem lehet negatív és több, mint 150 (sajnos..)

Kivétel kezelése Amennyiben kivételek keletkeznek, a programozó feladata, hogy kezelje őket. Nem muszáj, de erősen ajánlott. A dobott kivételt el kell kapni. Throw és catch. A kezelés azt jelenti, hogy mentjük a menthetőt és tovább folytatjuk a programot. PL nem létező fájl nyitása esetén kiírjuk, hogy nincs ilyen állomány, s újra bekérjük az állomány nevét, vagy nyitunk egy default-ot.

Kivétel kezelésének folyamata Kivételt dob valamelyik (hiba lehetőséget tartalmazó) programrész. Elkapjuk a kivételt még mielőtt felszállna a main fölé. Lehetőleg az elkapás keretében le is kezeljük a kivételt. (Az elkapott, de le nem kezelt kivétel esetén a kivételt okozó programrész nem kerül végrehajtásra.)

Kezeletlen kivétel public class Main { public static void kivetel(){ int a=2/0; } public static void main(String[] args) { kivetel();

Kezeletlen kivétel Az eredmény: Exception in thread "main" java.lang.ArithmeticException: / by zero at kivétel.Main.kivetel(Main.java:14) at kivétel.Main.main(Main.java:20)

Kezelt kivétel public class Main { public static void kivetel(){ try{ int a=2/0; } catch(Throwable e){ public static void main(String[] args) { kivetel();

Az eredmény init: deps-jar: Compiling 1 source file to C:\javaprog\Kivétel\build\classes compile: run: BUILD SUCCESSFUL (total time: 0 seconds) Azaz semmi….

Jobban kezelt kivétel public class Main { public static void kivetel(){ try{ int a=2/0; } catch(Throwable e){ System.out.println("Kivetel dobodott..."); public static void main(String[] args) { kivetel();

Eredmény init: deps-jar: Compiling 1 source file to C:\javaprog\Kivétel\build\classes compile: run: Kivetel dobodott... BUILD SUCCESSFUL (total time: 0 seconds)

Kivételek a Java-ban A kivételeket Java-ban osztályok reprezentálják A kivételek a Throwable ősosztály leszármazottjai Vannak előredefiniált –már létező- kivételek Saját kivétel esetén tehát vagy a Thorwable osztályból, vagy a Throwable osztályból származó osztályból származtatunk

Saját kivétel dobása public class Main { public static void kivetel(){ try{ int a=-1; if (a<0) throw new Thorwable(); } catch(Throwable e){ System.out.println("Kivetel dobodott..."); public static void main(String[] args) { kivetel(); Eredmény: Kivetel dobodott...

Kivétel osztályok Ellenőrzött Throwable Exception Error RuntimeException Ellenőrzetlen

Egy try-hoz több catch public class Main { public static void kivetel(){ try{ int a=-1; if (a<0) throw new Error(); } catch(Error e){ System.out.println("1"); catch(Throwable e){ System.out.println("2"); public static void main(String[] args) { kivetel(); } Eredmény: 1

Egy try-hoz több catch public class Main { public static void kivetel(){ try{ int a=-1; if (a<0) throw new Error();} } catch(Throwable e){ System.out.println("2");} } catch(Error e){ System.out.println("1");} } } public static void main(String[] args) { kivetel(); }} Eredmény: fordítási hiba exception java.lang.Error has already been caught

Kivételek osztályozása Ellenőrzött kivételek (checked exceptions) Kezelésük kötelező Az Exceptionból származnak (állomány kezelés) Nem ellenőrzött kivételek (unchecked exc.) Kezelésük nem kötelező Az Error-ból, vagy a RuntimeException-ból származnak (matematika)

Ellenőrzött kivételek A kivételt vagy a keletkezés helyén kell lekezelni, vagy a lekezelés kényszerét tovább kell dobni a hívó eljáráshoz. Jelzése: throws kivételosztály Legkésőbb a main-ben kezelhető le

Ellenőrizetlen kivételek Ha az adott metóduson belül nincs catch, akkor a hívó metódusban keres a JVM egy catch blokkot. Ha a hívó metódusokhoz történő visszalépések során egészen a main metódusig nem találunk megfelelő catch blokkot, akkor hiba, és kilép a programból. (Hibaüzenettel)

Ellenőrzött kivétel public class Main { public static void kivetel() throws Throwable{ } public static void main(String[] args) { kivetel(); Eredmény: unreported exception java.lang.Throwable; must be caught or declared to be thrown 1 error

Ellenőrzött kivétel public class Main { public static void kivetel()throws Throwable{ } public static void main(String[] args) { try{ kivetel(); catch(Throwable t){}; Eredmény: semmi gond

Ellenőrizetlen kivétel public class Main { public static void kivetel() throws Error{ } public static void main(String[] args) { kivetel(); Eredmény: Semmi gond

Saját kivételosztály írása class Kivétel extends Error{ } public class Main { public static void kivetel()throws Kivétel{ public static void main(String[] args) { kivetel();

Saját kivételosztály írása class Kivétel extends Error{ } public class Main { public static void kivetel(){ throw new Kivétel(); public static void main(String[] args) { try{kivetel();} catch(Kivétel k){ System.out.println(k.getMessage()); } Eredmény: null

Saját kivételosztály írása class Kivétel extends Error{ public Kivétel(String s){ super(s);}; } public class Main { public static void kivetel(){ throw new Kivétel("hopp"); public static void main(String[] args) { try{kivetel();} catch(Kivétel k){ System.out.println(k.getMessage()); } Eredmény: hopp

Tehát….. Kivételt a throw kulcsszóval dobunk throw kivételobjektum A kivételobjektum a Throwable osztály leszármazott osztályából van példányosítva A metódus fej után meg lehet adni, hogy milyen kivételt fog dobni a metódus, csak ellenőrzött kivételek esetén muszáj kezelni

Kivételek elkapása try-catch[-finally] Azaz: try{ Problémás rész} catch (Kivételosztály kivételobjektum){ esetleges hiba kezelése} [ finally{ amit mindenképpen végre kell hajtani} ]

try esetén kell vagy catch, vagy finally class Kivétel extends Error{ } public class Main { public static void kivetel(){ public static void main(String[] args) { try{kivetel();} Eredmény: 'try' without 'catch' or 'finally'

try esetén kell vagy catch, vagy finally class Kivétel extends Error{ } public class Main { public static void kivetel(){ public static void main(String[] args) { try{kivetel();} finally{}; Eredmény: semmi gond

try esetén kell vagy catch, vagy finally class Kivétel extends Error{ } public class Main { public static void kivetel(){ public static void main(String[] args) { try{kivetel();} catch(Kivétel k){}; Eredmény: semmi gond