Obsługa wyjątków w Java

Skoro już wiesz czym są wyjątki w Java, najwyższy czas nauczyć się je obsługiwać (przez pojęcie „obsługi wyjątku” rozumiemy w Java reakcję na zaistnienie sytuacji wyjątkowej/nie spodziewanej).

Java wymusza na nas programistach obsługę wyjątków! Jeżeli metoda deklaruje, że rzuca jakiś wyjątek (używając słowa kluczowego: throws) musimy ten wyjątek obsłużyć. Jeżeli tego nie zrobimy nasz kod się nie skompiluje.

Do obsługi wyjątków w Java używana jest konstrukcja trycatch. Składa się ona z bloku try („spróbuj”) oraz bloków catch („złap”) dla dowolnej ilości wyjątków które chcemy obsłużyć. Blok trycatch może wyglądać następująco:

Omówmy najpierw pierwszy blok kodu tj. try { … }. W tym miejscu znajduje się nasz „główny” kod aplikacji który może rzucić jeden lub więcej wyjątków. Dla przykładu załóżmy, że chcemy zapisać fragment tekstu do pliku. W tym celu musimy utworzyć obiekt pliku, następnie utworzyć obiekt typu java.io.PrintWriter, który umożliwi nam zapis do pliku. Później zapisać tekst do pliku oraz na końcu zwolnić zasoby zamykając obiekt PrintWriter. Przykładowy fragment kodu znajduje się poniżej:

Jeżeli spróbujemy skompilować powyższy kod kompilator poinformuje nas o tym, że użyty konstruktor obiektu PrintWriter rzuca wyjątek typu java.io.FileNotFoundException wymiuszając w ten sposób na nas użycie bloku try { … } catch w tym miejscu.

W sekcji try { … }, musimy umieścić wszystkie odwołania do zmiennej writer gdyż blok try { … } wyznacza „blok kodu” (więcej informacji o blokach kodu). Dlatego finalna wersja naszej mikro aplikacji będzie wyglądała następująco:

W sekcji catch (linie 7 do 9) łapiemy wyjątek FileNotFoundException i w przypadku jego wystąpienia wypiszemy na konsoli komunikat: Wskazany plik nie istnieje.

Program napisany w ten sposób, zawsze będzie wypisywał komunikat z sekcji catch { … }, gdyż w nazwie pliku podajemy niepoprawną ścieżkę. Usunięcie znaku „/” w pierzej linii listingu automatycznie spowoduje, że aplikacja zacznie działać poprawnie tj. utworzy wskazany plik i zapisze w nim „Hello world”.

Warto również zauważyć, że program ten może zostać napisany znacznie lepiej korzystając z instrukcji try-with-resources dostępniej od Java7. W takim przypadku nie musimy sami „ręcznie” zamykać obiektu PrintWriter, zrobi to za nas JVM. Poniżej znajduje się optymalny kod aplikacji:

Spodobał się Tobie ten wpis? Podziel się nim ze znajomymi

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *