Obsługa wyjątków Java
⚡ Inteligentne podsumowanie
Java Obsługa wyjątków zapewnia ustrukturyzowany mechanizm zarządzania błędami w czasie wykonywania, które zakłócają normalny przepływ programu. Wykorzystuje słowa kluczowe try, catch, Finally, throw i throws do wykrywania, izolowania i odzyskiwania po sytuacjach wyjątkowych, jednocześnie zachowując…ping aplikacje solidne i przewidywalne.

Czym jest wyjątek w Java?
An Wyjątek w Java to zdarzenie, które przerywa wykonywanie instrukcji programu i zakłóca normalny przebieg wykonywania programu. Jest to obiekt, który opakowuje informacje o zdarzeniu błędu, które wystąpiło w metodzie i jest przekazywane do systemu wykonawczego. W Javawyjątki są używane głównie do sygnalizowania różnych typów warunków błędów, aby programiści mogli na nie reagować w sposób kontrolowany.
Istnieją dwie szerokie kategorie błędów w Java:
- Błędy czasu kompilacji
- Błędy uruchomieniowe
Błędy czasu kompilacji można podzielić na dwa dalsze typy:
- Błędy składniowe
- Błędy semantyczne
Przykład błędów składniowych:
Zamiast deklarować int a; błędnie zadeklarowałeś to jako in a;, dla którego kompilator zgłosi błąd.
Przykład błędów semantycznych: Zadeklarowałeś zmienną int a; i po kilku linijkach kodu ponownie deklarujesz liczbę całkowitą jako int a;. Wszystkie te błędy są podświetlane podczas kompilacji kodu.
Przykład błędów wykonawczych
Błąd czasu wykonania jest określany jako Wyjątek. Jest to każde zdarzenie, które przerywa normalny przebieg wykonywania programu. Przykładami wyjątków są wyjątek arytmetyczny, wyjątek NullPointerException, wyjątek dzielenia przez zero i wiele innych. Wyjątki w Java są to warunki, na które deweloper często nie ma bezpośredniego wpływu.
Kliknij w tym miejscu jeśli film nie jest dostępny
Dlaczego potrzebujemy obsługi wyjątków?
Załóżmy, że napisałeś program, który ma dostęp do serwera. Wszystko działa dobrze, gdy go rozwijasz.ping kod w lokalnym środowisku z kontrolowanymi warunkami.
Podczas rzeczywistego przebiegu produkcji serwer może być wyłączony. Gdy program próbuje uzyskać do niego dostęp, zgłaszany jest wyjątek, a bez odpowiedniej obsługi program nagle się zakończy.
Jak obsłużyć wyjątek w Java
Do tej pory widzieliśmy, że wyjątek często pozostaje poza kontrolą programisty. Jednak obwinianie błędów kodu o problemy środowiskowe nie jest prawdziwym rozwiązaniem. Potrzebne jest solidne oprogramowanie, które poradzi sobie z sytuacjami wyjątkowymi. Taki kod jest znany jako Obsługa wyjątków.
W naszym przykładzie dobra obsługa wyjątków oznacza, że gdy serwer podstawowy przestanie działać, program automatycznie połączy się z serwerem zapasowym.
Aby to zaimplementować, możesz napisać kod łączący się z serwerem za pomocą tradycyjnych instrukcji warunkowych if i else. Sprawdzisz, czy serwer jest wyłączony, a jeśli tak, napiszesz kod łączący się z serwerem zapasowym. Taka organizacja kodu za pomocą rozgałęzień if i else nie jest efektywna, gdy kod zawiera wiele instrukcji warunkowych. Java wyjątki Poradzić sobie.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Wypróbuj Catch Block w Java
Java zapewnia wbudowany mechanizm obsługi wyjątków, który oddziela logikę normalną od logiki odzyskiwania po błędzie.
- Normalny kod trafia do a PRÓBOWAĆ blok.
- Kod obsługi wyjątków trafia do pliku CATCH blok.
W naszym przykładzie blok TRY będzie zawierał kod połączenia z serwerem. Blok CATCH będzie zawierał kod połączenia z serwerem zapasowym. Jeśli serwer jest aktywny, kod w bloku CATCH zostanie zignorowany. Jeśli serwer jest wyłączony, zgłaszany jest wyjątek i wykonywany jest kod z bloku catch.
Oto jak obsługiwany jest wyjątek Java.
Składnia użycia try i catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Przykład bloku Try Catch
Krok 1) Skopiuj poniższy kod do edytora.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Krok 2) Zapisz plik i skompiluj kod. Uruchom program za pomocą polecenia java. JavaWyjątek.
Krok 3) W wierszu 5 pojawia się wyjątek arytmetyczny: dzielenie przez zero, natomiast wiersz 6 nigdy nie jest wykonywany.
Krok 4) Teraz sprawdźmy, jak try i catch pomogą nam obsłużyć ten wyjątek. Umieścimy linię kodu powodującą wyjątek w próbować blok, po którym następuje a łapać blok. Skopiuj poniższy kod do edytora.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Krok 5) Zapisz, skompiluj i uruchom kod. Otrzymasz następujący wynik.
Jak widać, wyjątek jest obsługiwany, a ostatnia linia kodu również jest wykonywana. Zauważ również, że linia 7 nie zostanie wykonana, ponieważ gdy tylko zostanie zgłoszony wyjątek, sterowanie przeskakuje do bloku catch.
Uwaga: Obiekt ArithmeticException „e” zawiera informacje o wystąpieniu wyjątku, co może być przydatne podczas podejmowania działań naprawczych.
Java Hierarchia klas wyjątków
Po wykonaniu jednej instrukcji catch pozostałe są pomijane, a wykonywanie jest kontynuowane po bloku try-catch. Zagnieżdżone bloki catch muszą przestrzegać hierarchii wyjątków od najbardziej szczegółowej podklasy do najbardziej ogólnej klasy nadrzędnej.
- Wszystkie klasy wyjątków w Java Rozszerz klasę Throwable. Throwable ma dwie podklasy: Error i Exception.
- Klasa Error definiuje wyjątki lub problemy, które nie powinny wystąpić w normalnych okolicznościach w programie, na przykład błąd pamięci, błąd sprzętowy lub błąd JVM.
- Klasa Exception reprezentuje wyjątki, które mogą być obsłużone przez program. Program może poradzić sobie z tymi wyjątkami, używając bloków try i catch.
- Wyjątek RuntimeException jest podklasą klasy Exception. Wyjątki tego typu reprezentują niesprawdzone wyjątki występujące w czasie wykonywania i niemogące zostać wykryte w czasie kompilacji. Dobrymi przykładami są wyjątek dzielenia przez zero i wyjątek wskaźnika null.
- Wyjątek IOException jest generowany podczas operacji wejścia i wyjścia.
- Wyjątek InterruptedException w Java jest generowany podczas operacji wielowątkowych, gdy wątek zostaje przerwany.
Przykład: zagnieżdżanie bloków try i catch
Krok 1) Skopiuj poniższy kod do edytora.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Krok 2) Zapisz plik i skompiluj kod. Uruchom program za pomocą polecenia: Jawa JavaWyjątek.
Krok 3) Generowany jest wyjątek ArrayIndexOutOfBoundsException. Zmień wartość int d na 0. Zapisz, skompiluj i uruchom kod.
Krok 4) Należy wygenerować wyjątek ArithmeticException.
Krok 5) Odkomentuj wiersze od 10 do 12. Zapisz, skompiluj i uruchom kod.
Krok 6) Błąd kompilacji? Dzieje się tak, ponieważ Exception jest klasą bazową ArithmeticException. Każdy wyjątek zgłoszony przez ArithmeticException może być również obsłużony przez klasę Exception. W związku z tym blok catch ArithmeticException nigdy nie będzie miał szansy na wykonanie, co czyni go zbędnym. Stąd błąd kompilacji.
Java Wreszcie blok
Ostatnim blokiem jest wykonywane niezależnie od zgłoszonego wyjątku w bloku try. To jest fakultatywny do użycia z blokiem try. Blok Finally to właściwe miejsce do zwalniania zasobów, takich jak połączenia z bazą danych, pliki czy gniazda sieciowe.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Jeżeli w bloku try zgłoszony zostanie wyjątek, blok Finally zostanie wykonany po zakończeniu bloku catch.
Przykład bloku Finally
Krok 1) Skopiuj poniższy kod do edytora.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Krok 2) Zapisz, skompiluj i uruchom kod.
Krok 3) Oczekiwany wynik: Blok Finally zostanie wykonany, mimo że został zgłoszony wyjątek.
Krok 4) Zmień wartość zmiennej d = 1. Zapisz, skompiluj i uruchom kod, a następnie obserwuj wynik.
Najlepsze praktyki dla Java Obsługa wyjątków
Przestrzeganie kilku sprawdzonych zasad pomoże Ci zachować zdrowie Java kod odporny, czytelny i łatwy do debugowania:
- Najpierw wychwytuj najbardziej szczegółowy wyjątek, a następnie te bardziej ogólne, aby zachować integralność hierarchii wyjątków.
- Unikaj pustych bloków catch. Przynajmniej loguj wyjątek, aby nigdy nie stracić przyczyny problemu.
- Użyj bloku Finally lub spróbuj użyć zasobów, aby zwolnić pliki, gniazda i połączenia z bazą danych.
- Zgłaszaj sprawdzone wyjątki tylko wtedy, gdy wywołujący może rozsądnie odzyskać kontrolę, natomiast niesprawdzonych wyjątków używaj w przypadku błędów programistycznych.
- Opakuj wyjątki niskiego poziomu w sensowny wyjątek biznesowy, aby zachować kompatybilność APItracjest czysty.
- Nigdy nie pomijaj wyjątku InterruptedException w kodzie wielowątkowym, zamiast tego przywróć flagę przerwania.







