Sytuacje wyjatkowe.-Pochodzenie
Podczas działania programu mogą się zdarzyć różne nieprzewidziane sytuacje jak np.
Otwarcie nieistniejącego pliku
Podanie nieprawidłowych danych
Błędy arytmetyczne
Brak pamięci na zapisanie danych ...
Wszystkie te sytuacje powodują zawieszenie programu gdy nie przewidzimy odpowiedniej ich obsługi.
Pochodzenie cd
Obsługa sytuacji wyjątkowych została zaczerpnięta z języka ADA
Informacja o błędzie nazywana jest wyjątkiem (ang. Exception)
Aby uchronić się przed błędem w sytuacji wyjątkowej potrzeba przypisać do niej odpowiedni ciąg instrukcji, które tę sytuację rozwiążą
Rodzaje
Error - sytuacje specjalne w Wirtualnej maszynie Javy
Exception - wystąpił błąd ale nie jest to groźny błąd systemowy
RunTimeExceptions - występują podczas wykonywania programów - posiada podklasy:
NullPointerException,
ClassCastException, IllegalThreadStateException,
ArrayOutOlBoundsException
Obsługa - ogólnie
Przerwanie normalnego działania programu
W Java sytuacja wyjątkowa występuje po napotkaniu instrukcji throw
Throw przekazuje sterowanie do catch, który obsługuje tą sytuacje wyjątkową.
Gdy metoda, która wygenerowała wyjątek nie ma bloku obsługującego go, to sterowanie przekazywane jest do metody, która ją wywoła i tak dalej aż do znalezienia takiego bloku.
Obsługa - wyrażenia
Metoda() throws Exceptio - informuje JVM, że metoda może wygenerować wyjątek
throw - generowanie wyjątku - Sytuacja wyjątkowa zjawia się gdy wykona się instrukcja throw.
Generowanie wyjątku
public lass WywolajWyjatek {
static public void main (String args []) throws Exception {
Liczba liczba = new Liczba ();
Liczba.dzile (1);
}}
calss Liczba {
int m_i =10;
int dziel (float i ) throws Exception {
if (i/2 !=0) throw new Exception („Liczba parzysta”);
if (i==0) throw new Exception („Dzielenie przez 0 !”);
return (int) (m_i/i);
}}
Obsługa - przykład
try {…} - blok instrukcji, gdzie może wystąpić wyjątek,
catch (ObiektImpletujacyInterfejsThrowable nazwa Zmiennej) {…} - blok instrukcji obsługujących wystąpienia sytuacji wyjątkowej jest wykonywany tylko, gdy wystąpi wyjątek typu takiego jak typ zmiennej będącej parametrem bloku catch
finalny {…} Opcjonalny blok instrukcji wykonywanych przed opuszczeniem sterowania, nawet jeśli try zawiera instrukcję return lub spowodował wystąpienie wyjątku
Kolejność obsługi bloków wyjątku
Blok Iry - program opuszcza ten blok gdy wystąpi return lub wyjątek
Bloki catch - program opuszcza ten blok gdy zakończy obsługę wyjątku
Blok finally- obsługiwany zawsze gdy niezależnie czy był wyjątek czy nie Stosuje się go np. do zamykania otwartych strumieni.
Definiowanie klas wyjątków
Klasy, które obsługują sytuacje uznane przez programistę za wyjątkowe
Nową klasę definiujemy jako podklasę klasy Exeption.
class NaszWyjatek extends Exception {
NaszWyjatek ()
{this („”); }
NaszWyjatek (String g) {
Super („ Nic się nie stało to tylko:” +”NaszWyjatek); } }
Obsługa wielu wyjątków
Należy zdefiniować kilka wyjątków
Umieścić kilka bloków catch po bloku try obsługujących odpowiedni wyjątek
Przykład: Dwa wyjątki:
class BrakWolnychMiejsc extends Exception {…}
class BrakRezerwacji extends BrakWolnychMiejsc {…}
Wyjątek
Try {…}
catch (Exception e)
{…}
catch (B rak Rezerwacja br)
{…}
catch (BrakWolnychMiejsc bwm)
{…}
Wyjatek typu BrakRezerwacji i BrakWolnychMiejsc nigdy nie zostałyby obsłużone w bloku catch do tego przeznaczonym ale zawsze w bloku catch (Exceptione e).