1 / 30

Kivételkezelés

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.

latif
Download Presentation

Kivételkezelés

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kivételkezelés

  2. 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

  3. 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..)

  4. 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.

  5. 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.)

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

  7. 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)

  8. 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(); } }

  9. 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….

  10. 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(); } }

  11. 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)

  12. 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

  13. 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...

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

  15. 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

  16. 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

  17. 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)

  18. 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

  19. 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)

  20. 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 kivetel(); 1 error

  21. 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

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

  23. 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(); } }

  24. 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

  25. 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

  26. 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

  27. 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} ]

  28. 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{kivetel();}

  29. 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

  30. 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

More Related