Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Podobne dokumenty
Aplikacje w środowisku Java

Wykład 8: Obsługa Wyjątków

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie obiektowe

Programowanie Obiektowe Ćwiczenie 4

Wyjątki (exceptions)

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Zaawansowane programowanie w języku C++ Wyjątki

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Obsługa wyjątków. Rysunek 2-4 Hierarchia dziedziczenia klas wyjątków

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Dawid Gierszewski Adam Hanasko

Wykład 04. Programowanie obiektowe. Maciej Wołoszyn 17 marca Spis treści

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Podstawy i języki programowania

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Klasy cd. Struktury Interfejsy Wyjątki

Dokumentacja do API Javy.

Dziedziczenie. Tomasz Borzyszkowski

Programowanie obiektowe

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wywoływanie metod zdalnych

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Konwencje obsługi błędów

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Obsługa wyjątków. Język C++ WW12

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wykład 4: Klasy i Metody

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Materiały do zajęć III

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie obiektowe

Języki i metody programowania Java. Wykład 2 (część 2)

Efekty uboczne błędów

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Programowanie obiektowe

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Remote Method Invocation 17 listopada 2010

Aplikacje RMI

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Metody Metody, parametry, zwracanie wartości

Aplikacje w Javie- wykład 11 Wątki-podstawy

Szablony funkcji i klas (templates)

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Aplikacje w środowisku Java

Programowanie w Internecie. Java

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Wywoływanie metod zdalnych

Aplikacje w środowisku Java

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Programowanie obiektowe

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Struktura programu: package pl.mojastrona.mojpakiet; import javax.swing.*; import java.awt.container; class MojaKlasa extends Jframe {

Programowanie obiektowe

Projektowanie obiektowe. Roman Simiński Polimorfizm

Metody dostępu do danych

Kompozycja i dziedziczenie klas

PARADYGMATY PROGRAMOWANIA Wykład 4

Dziedziczenie. dr Jarosław Skaruz

Multimedia JAVA. Historia

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Programowanie w Javie - wykład 3

Programowanie w języku Java WYKŁAD

Wykład 8: klasy cz. 4

1 Atrybuty i metody klasowe

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wykład 7: Pakiety i Interfejsy

Ćwiczenie 1. Przygotowanie środowiska JAVA

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Język C++ wykład VIII

Polimorfizm. dr Jarosław Skaruz

Transkrypt:

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota <m.lasota@tu.kielce.pl> Version 1.0, 13-05-2017

Spis treści Wyjątki.................................................................................... 1 Obsługa wyjątków.......................................................................... 3 Generowanie (propagowanie) wyjątków...................................................... 4 Tworzenie własnych klas wyjątków.......................................................... 5 Bibliografia................................................................................. 6

Zajęcia laboratoryjne nr 8 z programowania w języku Java - jedne zajęcia 1,5h. Wyjątki Przez pojęcie wyjątków w językach obiektowych rozumiemy mechanizm kontroli przepływu służący do obsługi zdarzeń wyjątkowych (w szczególności błędów). Wyjątek w języku Java to obiekt, który opisuje pewną sytuację błędną lub nieprawidłową wyjątkową. Jest to obiekt odpowiedniego typu, tj. obiekt klasy Throwable lub jej dowolnej podklasy (np. Exception, Error itd.). Ważną częścią każdej aplikacji jest sygnalizowanie oraz obsługa pojawiających się błędów. Wystąpienie błędu w aplikacji zaimplementowanej w języku Java sygnalizujemy poprzez rzucenie (wyrzucenie) wyjątku. Obsługa błędów to tzw. łapanie (przechwytywanie) wyjątków. 1

Rysunek 1: Hierarchia klas wyjątków. Wyjątki dzielą się na dwa rodzaje: 2

kontrolowane - to takie które musimy deklarować i obsługiwać, niekontrolowane - to takie które możemy obsługiwać, ale nie musimy. Wyjątki niekontrolowane to instancje klas Error i RuntimeException oraz ich dowolnych podklas. Wyjątki kontrolowane to instancje klas Throwable i Exception oraz ich podklas, z wyłączeniem podklas klas Error i RuntimeException. Wyjątki mogą być rzucane (zgłaszane) przez Wirtualną Maszynę Javy (JVM) oraz przez programistę. Najpopularniejszym wyjątkiem rzucanym przez JVM jest NullPointerException. Wyjątek ten rzucany jest przy próbie odwołania się do obiektu (np. próba uruchomienia metody) z użyciem referencji, która ma wartość null. NullPointerException jest podklasą klasy RuntimeException tak więc jest wyjątkiem niekontrolowanym nie musimy go w żaden sposób deklarować czy obsługiwać. Obsługa wyjątków Wyjątki są wyrzucane i propagowane tak długo jak długo pozostają nie przechwycone w kodzie programu. Wyjątki nie przechwycone propagują się aż do metody main( ) i jeśli także tam nie są przechwycone powodują przerwanie wykonania programu. W celu przechwycenia i obsłużenia wyjątków w języku Java korzysta się z bloku try-catch-finally. Kod którego wyjątki chcemy przechwytywać umieszczamy w klauzuli. Wewnątrz klauzuli catch { umieszczamy kod obsługi błędu - kod ten będzie wykonany tylko i wyłącznie wówczas gdy kod programu wyrzuci wyjątek typu zgodnego z typem określonym w deklaracji klauzuli catch. Kod umieszczony wewnątrz klauzuli finally { będzie wykonany zawsze, niezależnie od tego czy kod programu wyrzucił wyjątek czy nie. Przykład 1. Przykład definicji bloku try-catch-finally //kod programu generujacy wyjatek catch (Exception e) { //obsluga wyjatkow klasy Exception catch (Throwable t) { //obsluga wyjatkow klasy Throwable finally { //kod zawsze wykonywany Gdy w wyniku wykonania instrukcji w bloku try powstanie wyjątek typu Exception lub Throwable to sterowanie zostanie przekazane do kodu umieszczonego w w/w klauzulach catch. Klauzula finally jest opcjonalna, za to klauzul catch może być dowolnie wiele. 3

Przykład 2. Przykład użycia bloku try-catch-finally class TestExceptions { public static void main(string args[]) { int d, a; d = 0; a = 42 / d; System.out.println("This will not be printed."); catch (ArithmeticException e) { System.out.println("Division by zero."); finally { System. out. println( "Finally") ; System.out.println("Out of try/catch/finally - statement"); Generowanie (propagowanie) wyjątków Wyjątki mogą być generowane jawnie w kodzie programu tj. przez programistę - z użyciem słowa kluczowego throw. Tak wygenerowany wyjątek może zostać obsłużony bezpośrednio przez klauzulę catch lub może zostać propagowany bezpośrednio wyżej do metody wywołującej nasz kod (naszą metodę) w której został wyrzucony wyjątek. Przykład 3. Przykład użycia instrukcji throw do generowania wyjątku if (o == null) throw new NullPointerException(); W istocie, instrukcja throw jest niczym innym jak sposobem specyficznego przekazywania sterowania do jakichś punktów programu (do miejsc obsługi wyjątku). Należy jednak korzystać z niej wyłącznie w celu sygnalizowania błędów. Przykład 4. Przykład ponownego wyrzucenia wyjątku... catch (Exception e) {... throw e; //ponowne wyrzucenie wyjątku 4

Przykład 5. Przykład propagowania wyjątku // propagowanie wyjątku którego obsługą zajmie się kod wywołujący metodę void method() throws IOException { Przykład 6. Przykład propagowania wyjątku class TestExceptions { static void mymethod(int testnum) throws Exception { System.out.println ("start - mymethod"); if (testnum == 12) throw new Exception(); System.out.println("end - mymethod"); return; public static void main(string args[]) { int testnum = 12; System.out.println("try - first statement"); mymethod(testnum); System.out.println("try - last statement"); catch ( Exception ex) { System.out.println("An Exception"); finally { System. out. println( "finally") ; System.out.println("Out of try/catch/finally - statement"); Tworzenie własnych klas wyjątków Oprócz wykorzystywania dostępnych klas wyjątków do generowania/obsługi sytuacji wyjątkowych programista ma możliwość tworzenia własnych klas wyjątków. Żeby stworzyć własny wyjątek należy zdefiniować odpowiednią klasę która dziedziczy funkcjonalność z klasy Exception. Przykład 7. Definiowanie własnej klasy wyjątku class SuperWyjatek extends Exception {... 5

Zwykle w naszej klasie wystarczy umieścić dwa konstruktory: bezparametrowy oraz z jednym argumentem typu String (komunikat o przyczynie powstania wyjątku). W konstruktorach tych należy wywołać konstruktor nadklasy (za pomocą odwołania super( ), w drugim przypadku z argumentem String). Przykład 8. Przykład użycia własnej klasy wyjątku class MyException extends Exception{ public MyException() { System.out.println("Error"); class TestExceptions { static void mymethod(int testnum) throws MyException { System.out.println ("start - mymethod"); if (testnum == 12) throw new MyException(); System.out.println("end - mymethod"); return; public static void main(string args[]) { int testnum = 12; System.out.println("try - first statement"); mymethod(testnum); System.out.println("try - last statement"); catch ( MyException ex) { System.out.println("An Exception"); finally { System. out. println( "finally") ; System.out.println("Out of try/catch/finally - statement"); Bibliografia Bruce Eckels, "Thinking in Java. Edycja polska. Wydanie IV", wydawnictwo Helion. Cay S. Horstmann, Gary Cornell, "Java. Podstawy. Wydanie IX", wydawnictwo Helion. Cay S. Horstmann, Gary Cornell, "Java. Techniki zaawansowane. Wydanie IX", wydawnictwo Helion. Krzysztof Barteczko, "Podstawy programowania w języku Java, PJWSTK", http://edu.pjwstk.edu.pl/wyklady/ppj/scb/ 6

Konrad Kurczyna, "Laboratorium Java", Politechnika Świętokrzyska w Kielcach. Mariusz Lipiński, "Nauka Javy", http://www.naukajavy.pl/ 7