Obsługa błędów za pomocą wyjątków

30
Seminarium problemowe Temat seminarium: Obsługa błędów za pomocą wyjątków Łukasz Czechowski

Transcript of Obsługa błędów za pomocą wyjątków

Page 1: Obsługa błędów za pomocą wyjątków

Seminarium problemowe

Temat seminarium:

Obsługa błędów za pomocą wyjątków

Łukasz Czechowski

Page 2: Obsługa błędów za pomocą wyjątków

Plan prezentacji

1) Podstawy obsługi wyjątków

2) Klasy i rodzaje wyjątków

3) Przechwytywanie i obsługa wyjątków

4) Tworzenie własnych wyjątków i ich specyfikacja

Page 3: Obsługa błędów za pomocą wyjątków

Podstawy obsługi wyjątków

● Sytuacja wyjątkowa● Zgłaszanie/wyrzucanie wyjątku (ang. throwing)

- throw- new- procedura obsługi

● Parametry

Page 4: Obsługa błędów za pomocą wyjątków

Podstawy obsługi wyjątków

● Przykład1) if(obiekt==null)

throw new NullPointerException();Output:

Exception in thread " main" java.lang.NullPointerExceptionat MyClass.main(MyClass.java:47)

2) if(obiekt2==null)throw new NullPointerException(”Obiekt2 nie został zainicjowany”);

Output:Exception in thread " main" java.lang.NullPointerException:

Obiekt2 nie został zainicjowanyat MyClass.main(MyClass.java:47)

Page 5: Obsługa błędów za pomocą wyjątków

Klasy i rodzaje wyjątków

Object

Throwable

Error

RuntimeException

Exception

Hierarchiaklas

wyjątków

Wyjątki niekontrolowaneWyjątki kontrolowane

Page 6: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Blok try, catch i finally

try { //kod który może zgłosić wyjątki

} catch (Typ1 w) { //obsługa wyjątków Typ1

} catch (Typ2 w) { //obsługa wyjątków Typ2

} catch (Typ3 w) { //obsługa wyjątków Typ3

} finally { //czynności, które są wykonywane za każdym razem}

Page 7: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady

public class MyClass { public static void main(String args[]) { int []tablica=new int[10]; try{ tablica[10]=2; }catch(ArrayIndexOutOfBoundsException e) {} } }

Page 8: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady

public class MyClass { public static void main(String args[]) { int []tablica=new int[10]; try{ tablica[10]=2; }catch(ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); System.out.println(e.getLocalizedMessage()); System.out.println(e.toString()); e.printStackTrace();} }}

Page 9: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady

Output:

e.getMessage() -> 10e.getLocalizedMessage() -> 10e.toString() -> java.lang.ArrayIndexOutOfBoundsException:

10e.printStackTrace() -> java.lang.ArrayIndexOutOfBoundsException:

10 at MyClass.main(MyClass.java:43)

Page 10: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady

public class MyClass { public static void main(String args[]) { int []tablica=new int[10]; try{ tablica[10]=2; }catch(Exception e) { System.out.println(e.getMessage()); System.out.println(e.getLocalizedMessage()); System.out.println(e.toString()); e.printStackTrace();} }}

Page 11: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady

Output:

e.getMessage() -> 10e.getLocalizedMessage() -> 10e.toString() -> java.lang.ArrayIndexOutOfBoundsException:

10e.printStackTrace() -> java.lang.ArrayIndexOutOfBoundsException:

10 at MyClass.main(MyClass.java:43)

Page 12: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady class Przyklad { public double przyklad(int a,int b) { if(b==0) throw new ArithmeticException("Divide by zero"); return a/b; } }public class MyClass { public static void main(String args[]) { Przyklad np=new Przyklad(); try{ np.przyklad(1,0);}catch(ArithmeticException e){e.printStackTrace();}

Page 13: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady Output:

java.lang.ArithmeticException: Divide by zero at Przyklad.przyklad(MyClass.java:28) at MyClass.main(MyClass.java:40)

Page 14: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady class Przyklad { public double przyklad(int a,int b){ return podziel(a,b); } public double podziel(int a,int b){ if(b==0) throw new ArithmeticException("Divide by zero"); return a/b;} }public class MyClass { public static void klasa(){ Przyklad np=new Przyklad(); np.przyklad(1,0); } public static void main(String args[]) { try{ klasa();}catch(ArithmeticException e){ e.printStackTrace(); }

Page 15: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady Output:

java.lang.ArithmeticException: Divide by zero at Przyklad.podziel(MyClass.java:31) at Przyklad.przyklad(MyClass.java:27) at MyClass.klasa(MyClass.java:39) at MyClass.main(MyClass.java:45)

Page 16: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady class Punkt { int x,y;}public class MyClass { public static void main(String args[]){ Punkt z=null; int liczba; try{ liczba=1/0; z.x=1; }catch(ArithmeticException e){ System.out.println("Niepoprawna operacja arytmetyczna"); e.printStackTrace(); }catch(Exception e){ System.out.println("Blad ogolny"); e.printStackTrace(); }finally{System.out.println("Wykonywany za kazdym razem");}}

Page 17: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady Output:

Dla liczba=1/0;Niepoprawna operacja arytmetycznaWykonywany za kazdym razem

java.lang.ArithmeticException: / by zero at MyClass.main(MyClass.java:44)

Dla z.x=1Blad ogolnyWykonywany za kazdym razem

java.lang.NullPointerException at MyClass.main(MyClass.java:44)

Dla ;Wykonywany za kazdym razem

Page 18: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady class Punkt { int x,y;}public class MyClass { public static void main(String args[]){ Punkt z=null; int liczba; try{ try{ liczba=2/0; }catch(ArithmeticException e){ System.err.println("Niepoprawna operacja arytmetyczna"); e.printStackTrace(); liczba=0;} z.x=liczba; }catch(Exception e){ System.err.println("Blad ogolny"); e.printStackTrace(); }

Page 19: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady Output:

Niepoprawna operacja arytmetycznajava.lang.ArithmeticException: / by zero at MyClass.main(MyClass.java:45)Blad ogolnyjava.lang.NullPointerException at MyClass.main(MyClass.java:50)

Page 20: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady class Przyklad { public double wynik; public double przyklad(int a,int b) throws Throwable{ try{ wynik=podziel(a,b); }catch(ArithmeticException e){ //throw e; //throw e.fillInStackTrace(); } return wynik; } public double podziel(int a,int b){ return a/b; } }

Page 21: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady public class MyClass { public static void main(String args[]) throws Throwable{ Przyklad np=new Przyklad(); int liczba; try{ np.przyklad(1,0); }catch(Exception e){ System.err.println("Blad ogolny"); e.printStackTrace(); }}

Page 22: Obsługa błędów za pomocą wyjątków

Przechwytywanie i obsługa wyjątków

● Przykłady Output:

Dla throw e;Blad ogolnyjava.lang.ArithmeticException: / by zero

at Przyklad.podziel(MyClass.java:38) at Przyklad.przyklad(MyClass.java:29) at MyClass.main(MyClass.java:50)

Dla throw e.fillInStackTrace();Blad ogolnyjava.lang.ArithmeticException: / by zero

at Przyklad.przyklad(MyClass.java:32) at MyClass.main(MyClass.java:50)

Page 23: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● Tworzenie własnego wyjątku

class MojWyjatek extends Exception{}

● Specyfikacja

public double przyklad(int a,int b) throws MojWyjatek { ...}

Page 24: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● Przykładclass MojWyjatek extends Exception{}class Przyklad { public double przyklad(int a,int b)throws MojWyjatek { if(b==0) throw new MojWyjatek(); return a/b; }}public class MyClass { public static void main(String args[]){ Przyklad np=new Przyklad(); try{ np.przyklad(1,0); }catch(MojWyjatek e){e.printStackTrace();}}

Page 25: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● PrzykładOutput:

MojWyjatek at Przyklad.przyklad(MyClass.java:37) at MyClass.main(MyClass.java:51)

Page 26: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● Przykładclass MojWyjatek extends Exception{

public MojWyjatek(String inf)super(inf);

}class Przyklad { public double przyklad(int a,int b)throws MojWyjatek { if(b==0) throw new MojWyjatek(”Dzielenie przez zero”); return a/b; }}public class MyClass { public static void main(String args[]){ Przyklad np=new Przyklad(); try{ np.przyklad(1,0); }catch(MojWyjatek e){e.printStackTrace();}}

Page 27: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● PrzykładOutput:

MojWyjatek: Dzielenie przez zero at Przyklad.przyklad(MyClass.java:37) at MyClass.main(MyClass.java:51)

Page 28: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● Przykład: zagubiony wyjątekclass MojWyjatek extends Exception{ public MojWyjatek(String inf){ super(inf); }}class Przyklad { public double przyklad(int a,int b)throws MojWyjatek { if(b==0) throw new MojWyjatek("Dzielenie przez zero"); return a/b; } public void przyklad2(int a,int b)throws MojWyjatek { throw new MojWyjatek("Wyjatek"); }}

Page 29: Obsługa błędów za pomocą wyjątków

Tworzenie własnych wyjątków i ich specyfikacja

● Przykład: zagubiony wyjątek

public class MyClass { public static void main(String args[])throws MojWyjatek{ Przyklad np=new Przyklad(); try{ np.przyklad(1,0); }finally{ np.przyklad2(2,0); }Output:

Exception in thread "main" MojWyjatek: Wyjatek at Przyklad.przyklad2(MyClass.java:38) at MyClass.main(MyClass.java:51)

Page 30: Obsługa błędów za pomocą wyjątków

KONIEC

Dziękuję za uwagę!