Wyjątki

Wyjątki to obiekty informujące o wystąpieniu pewnej wyjątkowej sytuacji (np. przekroczenia indeksu tablicy, ...). Wszystkie wyjątki muszą pochodzić od klasy System.Exception . Wyjątek może być zgłoszony przez funkcję biblioteczną lub wewnątrz metody użytkownika. Metoda, która wykryła błąd może zgłosić wyjątek (dzięki throw). Nie ma gwarancji, że będzie cokolwiek, co wykryje obsłuży ten wyjątek (czyli odpowiednia instrukcja catch). Blok instrukcji obsługujących sytuacje wyjątkowe:


try {  ...                 // W tym bloku może wystąpić wyjątek
}
catch ( TypWyjątku  w ) {  // Blok wychwytujący wyjątki i obsługujący sytuacje wyjątkowe.
...                        // Może wystąpić wiele bloków catch.
}
finally {                  // Instrukcje w tym bloku są wykonywane zawsze przed
...                        // opuszczeniem bloku try. Jest to blok opcjonalny.
}

throw : słowo kluczowe umożliwiające zgłoszenie wyjątku. Gdy zostanie zgłoszony wyjątek stos wywołań funkcji jest zwijany do momentu, aż wyjątek zostanie przechwycony przez jeden z bloków catch.

try : umożliwia utworzenie bloku programu, który jest w stanie wychwytywać wyjątki.

Jako argument dla catch podajemy typ wychwytywanego wyjątku (np. catch ( IOException e) { ...} ) - jeśli pominiemy typ wyjątku, to będą wychwytywane wszystkie wyjątki (skrócony zapis wychwytywania wyjątków typu System.Exception). Po bloku try może się pojawić dowolna ilość bloków catch, ale wykonywany jest tylko pierwszy pasujący blok (np. nie możemy umieścić bloku catch wychwytującego wyjątek typu pochodnego od E za blokiem wychwytującym wyjątek typu E – gdyż nie miał by on szans na wykonanie).

Wszystkie instrukcje skoku (throw, return, break, continue, goto) są ograniczone przez instrukcję try. Skok poza blok try zawsze powoduje wykonanie bloku finally w danym bloku try. Ponadto nie można wykonać skoku z wnętrza na zewnątrz bloku finally.

Przykład:


. . .
public static void funkcja( ) {
	if(...) throw new IOException("Błąd w pliku");	// Zgłoszenie wyjątku
}
. . .
try {   ...                // W bloku try następuje wywołanie funkcji, która
	funkcja( ) ;       // może zgłosić wyjątek.
}
catch {                    // Blok catch wychwytujący wszystkie wyjątki.
	System.Console.Write( "BLAD" );
} 

Fragment drzewa dziedziczenia predefiniowanych klas wyjątków:

Fragment drzewa dziedziczenia predefiniowanych klas wyjątków.

Użytkownik tworzy wyjątki jako klasy pochodne od predefiniowanych wyjątków (wszystkie wyjątki muszą dziedziczyć po klasie System.Exception). Jedług konwencji typy wyjątków użytkownika powinny dziedziczyć z System.ApplicationException

Ważne składowe klasy System.Exception:

Message : tekst opisujący błąd, używany do poinformowania użytkownika o jego naturze.

StackTrace : ścieżka wywołań funkcji do momentu wystąpienia wyjątku. Informuje, w którym dokładnie miejscu pojawił się błąd. Jest typu string.


prev | Strona Główna | next

Copyright © 2006 Daniel Dusiński
Wszelkie prawa zastrzeżone