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.