Po mocnym spóźnieniu zapraszam Was na drugą część poprzedniego artykułu opowiadającego o klauzuli "try-catch" służącej do przechwytywania wyjątków z prostymi przykładami w języku Java. Postanowiłem poświęcić odrębny artykuł na te dodatkowe słowo kluczowe mające związek z wyjątkami, "finally". To jest blok, który wykonuje się zawsze niezależnie od tego, czy pewna ryzykowna operacja zakończyła się porażką lub sukcesem. Sprawdźmy jak to wygląda w praktyce.

FINALLY W BLOKU TRY-CATCH

Blok o powyższej nazwie jest całkowicie opcjonalny i zwykle jest rzadko wykorzystywany. Pobierając przykład z poprzedniej części, całość z "doczepionym" blokiem wygląda tak:

try
{
	ryzykownaMetoda();
}
catch (Exception e)
{
	//instrukcje wykonywane w momencie przechwycenia wyjątku
}
finally
{
	System.out.println("Koniec ryzykownej operacji.");
}

Ta część klauzuli umieszczana jest zawsze na końcu "ciągu" bloków "catch" i jak wspomniałem, wykonuje się po przeprowadzeniu wszystkich operacji w "try" (gdy obyło się bez przeszkód) oraz określonego bloku "catch" (gdy funkcja napotkała problem i zgłasza go funkcji wywołującej), niezależnie od rezultatu. Jest rzadko widziana w kodach źródłowych z tego względu, iż po tej strukturze "try-catch" dalsze instrukcje i tak są nadal wykonywane w taki sam sposób. Zatem, użycie części "finally" przeważnie jest bezcelowe.

Być może zaczyna mieć to istotne znaczenie dopiero przy programowaniu współbieżnym albo przy przechwytywaniu bardzo specyficznych wyjątków takich jak "RuntimeException", natomiast w chwili obecnej są to jedynie moje spekulacje niepoparte żadnymi dowodami. Gdy wrócę do języka Java i natrafię na jakąś różnicę, z pewnością napiszę stosowny artykuł o konkretnym spostrzeżeniu.

Finally

Blok "finally" występujący w klauzuli "try-catch" wykonuje się zawsze niezależnie od wyniku przeprowadzenia ryzykownych poleceń, zatem użycie tego jest opcjonalne.


Wniosek z tego taki, że możecie śmiało pisać dowolnie jak chcecie czyli pisać bloki "try-catch" z "finally" albo bez. Oddzieliłem te część od poprzedniej, aby nie mieszać Wam fragmentu opcjonalnego z fragmentem wymaganym i to jest cały powód. Tym razem bez żadnych magicznych sztuczek ani trzymania w napięciu.