Wyjątki klasy error sygnalizują poważne błędy systemowe, zazwyczaj nie są przechwytywane i nie powinno się wymuszać ich obsługi przez klienta.
Wyjątki klasy RuntiineException sygnalizują błędy programisty, czasami ich obsługa ma sens i wtedy jc przechwytujemy, ale wymuszanie ich obsługi nie jest wskazane Wyjątki dziedziczące po klasie Exception sygnalizują błędne zachowanie otoczenia serwera na które serwer powmien być przygotowany, zazwyczaj ich obsługa jest możliwa i najczęściej jest wymuszana przez serwer.
Do wymuszania obsługi wyjątku służy klauzula tlrrows.
void f () throws NullPointerExccption
I .....
if (o = = nuli) throw new NullPointerException(" Nie przekazano obiektu ");
Jeśli mamy sensowną możliwość reakcji (np. poprawa wątłości argumentu, doprecyzowanie informacji diagnostycznej itp ) na wystąpienie wyjątku powinniśmy go przechwycić i obsłużyć - służą do tego instrukcje try... catch
void f()
try {
// instrukcje mogące wygenerować wyjątek ) catch(Exception e) {
// obsługa wyjątku
// pozostałe instrukcje - pomijane w przypadku wystąpienia wyjątku
Jeśli instrukcje bloku try mogą wygenerować więcej rodzajów wyjątków to możemy użyć kilku instrukcji catch Ponieważ sprawdzane są kolejno więc ustawiamy je od od najbardziej szczegółowego wyjątku do najbardziej ogólnego.
void f()
try {
// utwóiz strumień plikowy, odczytaj i zamknij go ) catch(FileNotFoundException e) (
// nic odnaleziono pliku o podanej nazwie
catch(IOExccption e ) (
// obsługa pozostałych błędów wejścia wyjścia
// pozostałe instnikcje - pomijane w przypadku wystąpienia wyjątku