Wyjątki są fundamentalnym pojęciem w programowaniu Java, które pomaga radzić sobie z nieoczekiwanymi sytuacjami w twoim kodzie. Chociaż już nauczyłeś się, jak obsługiwać wyjątki, nadszedł czas, aby pójść o krok dalej: rzucanie i definiowanie własnych wyjątków. W tym przewodniku pokażę ci, jak generować wyjątki w swoim kodzie oraz tworzyć spersonalizowane klasy wyjątków, które pomogą ci uczynić twój kod bardziej klarownym i odpornym.
Najważniejsze wnioski
- Możesz rzucać własne wyjątki w Javie, aby lepiej radzić sobie z konkretnymi sytuacjami błędów.
- Definiowanie własnych klas wyjątków umożliwia uczynienie obsługi błędów bardziej naturalną i zrozumiałą.
- Nauczysz się, jak rzucać wyjątki zarówno w metodach, jak i w kontekście bloczków try-catch.
Przewodnik krok po kroku
1. Odświeżenie obsługi wyjątków
Na początku ważne jest, aby przypomnieć sobie, jak wygląda obsługa wyjątków w Javie. Możesz na przykład przypomnieć sobie konstrukty try-catch, które umożliwiają przechwytywanie błędów i odpowiednią na nie reakcję. W poprzednim rozdziale widziałeś, jak obsługiwać wyjątek NumberFormatException, gdy zachodzi nieprawidłowa konwersja z łańcucha na liczbę.
2. Wyjątki w swoim własnym kodzie
Teraz przyjrzyjmy się, jak możesz rzucać wyjątki w swoim własnym kodzie. Może to być szczególnie przydatne, gdy chcesz zdefiniować konkretne warunki błędów w swoich programach, które nie są standardowo obsługiwane w Javie.

3. Tworzenie klasy do walidacji
Przyjrzyjmy się przykładowej klasie, którą nazwiemy MeinValidator. Klasa ta zawiera metodę, która oczekuje segmentu kodu do walidacji, w naszym przypadku kodu PIN. Jeśli wprowadzony kod PIN nie odpowiada określonej wartości, zostanie rzucony wyjątek.
4. Generowanie i przechwytywanie błędów
W metodzie validateCode możesz utworzyć zapytanie if. Jeśli kod nie odpowiada oczekiwanej wartości, rzucasz nowy wyjątek, który wygląda następująco: throw new Exception("Tylko 42 jest odpowiedzią na wszystkie pytania.");. Używasz tutaj słowa kluczowego throw, aby wygenerować wyjątek.
5. Dostosowanie sygnatury metody
Aby sygnalizować, że ta metoda może rzucać wyjątek, musisz dodać słowo kluczowe throws do sygnatury metody. Tak więc metoda nazywa się teraz: public void validateCode(int code) throws Exception. W ten sposób rzucenie wyjątku jest jasno komunikowane, a wszyscy wywołujący metodę są zobowiązani do obsługi tego przypadku.
6. Obsługa wyjątku w bloku try-catch
Aby przechwycić wyjątek, możesz umieścić metodę w bloku try-catch. W momencie wystąpienia wyjątku, wykonywany jest kod w bloku catch, w którym realizujesz konkretną obsługę błędów, na przykład przez wyświetlenie komunikatu o błędzie.
7. Opcjonalne ponowne rzucenie wyjątków
Możesz również rozważyć ponowne rzucenie przechwyconego wyjątku, aby przekazać go na wyższy poziom logiki. Należy jednak pamiętać, że ma to sens tylko wtedy, gdy nie jesteś akurat w metodzie głównej, ponieważ po bloku catch zwykle nie następuje żaden inny kod.
8. Zalety własnych wyjątków
Największą zaletą własnych klas wyjątków jest to, że są one intuicyjnie nazwane i specyficzne dla danego przypadku użycia. Zamiast pracować z ogólnymi wyjątkami, możesz definiować konkretne klasy, takie jak NotFoundException lub InvalidInputException. Pomagają one nie tylko w identyfikacji błędów, ale także w debugowaniu i konserwacji twojego kodu.

Podsumowanie – Rzucanie i definiowanie wyjątków w Javie
Poprzez rzucanie i definiowanie własnych wyjątków zyskujesz potężne narzędzie do skutecznego radzenia sobie z błędami i uczynienia swojego kodu bardziej czytelnym. Możesz formułować konkretne warunki wyjątków i poprawiać logiczne oddzielenie błędów, co zwiększa możliwości konserwacji twojego programu.
Najczęściej zadawane pytania
Jaka jest różnica między wyjątkami checked a unchecked?Checked Exceptions muszą być obsługiwane w sygnaturze metody, podczas gdy unchecked Exceptions nie muszą.
Dlaczego powinienem tworzyć własne wyjątki?Własne wyjątki pomagają z konkretnymi komunikatami o błędach, które mają na celu lepsze identyfikowanie problemów i uczynienie kodu bardziej czytelnym.
Jak rzucić wyjątek w metodzie?Używasz słowa kluczowego throw, a następnie nowej instancji wyjątku.
Czy muszę w deklaracji metody wskazać, że rzucam wyjątek?Tak, używasz do tego słowa kluczowego throws w sygnaturze metody.
Co się stanie, jeśli nie obsłużę wyjątku?Program zazwyczaj zakończy się wyjątkiem wykonania, chyba że wyjątek jest nieprawidłowy i nieobsłużony.