Nieobsłużony wyjątek

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

Czym jest nieobsłużony wyjątek?

Nieobsłużony wyjątek to błąd zgłoszony w programie, który nie został przechwycony przez odpowiedni blok catch lub inny mechanizm obsługi błędów. Oznacza to, że program nie wie, jak bezpiecznie zareagować na zaistniałą sytuację.

W praktyce najczęściej skutkiem jest przerwanie działania programu albo zakończenie aktualnego wątku z komunikatem błędu.

Jak powstaje wyjątek?

Wyjątek może powstać np. gdy:
- nastąpi dzielenie przez zero,
- program odwoła się do nieistniejącego elementu tablicy,
- plik nie zostanie znaleziony,
- kod jawnie użyje instrukcji throw.

Przykład w stylu C#/Java:

try {
    int wynik = 10 / 0;
} catch (NullPointerException e) {
    System.out.println("Obsługa innego wyjątku");
}

W tym przykładzie powstaje wyjątek związany z dzieleniem przez zero, ale blok catch obsługuje inny typ wyjątku. W efekcie wyjątek pozostaje nieobsłużony.

Co dzieje się dalej?

Jeśli wyjątek nie zostanie przechwycony:
- program szuka pasującego bloku catch wyżej w stosie wywołań,
- jeśli go nie znajdzie, zgłasza błąd wykonania,
- zwykle wyświetla komunikat diagnostyczny, np. typ wyjątku i stos wywołań,
- program kończy działanie z błędem.

Ważne na egzaminie

Nieobsłużony wyjątek nie jest ignorowany przez kompilator i nie powoduje automatycznego usunięcia instrukcji throw. Poprawna interpretacja: jeśli błąd nie zostanie obsłużony przez catch, program zakończy działanie z błędem.