Obsługa wyjątków Java
W czym jest wyjątek Java?
Wyjątek w Java to zdarzenie, które przerywa wykonywanie instrukcji programu i zakłóca normalny przebieg wykonywania programu. Jest to obiekt, który otacza informację o zdarzeniu błędu, które wystąpiło w metodzie i przekazuje ją do systemu wykonawczego. W Java, wyjątki służą głównie do wskazywania różnych typów warunków błędów.
Istnieją dwa rodzaje błędów:
- Błędy czasu kompilacji
- Błędy uruchomieniowe
Błędy czasu kompilacji można ponownie podzielić na dwa 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: 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 wykonania nazywa się wyjątki błąd. Jest to każde zdarzenie, które przerywa normalny przebieg wykonywania programu. Przykładami wyjątków są: wyjątek arytmetyczny, wyjątek Nullpointer, wyjątek dzielenia przez zero itp. Wyjątki w Java są czymś, na co programiści nie mają wpływu.
Kliknij w tym miejscu jeśli film nie jest dostępny
Dlaczego potrzebujemy wyjątku?
Załóżmy, że zakodowałeś program umożliwiający dostęp do serwera. Podczas opracowywania kodu wszystko działało dobrze.
Podczas rzeczywistego działania produkcyjnego serwer jest wyłączony. Gdy program próbował uzyskać do niego dostęp, zgłaszany jest wyjątek.
Jak obsłużyć wyjątek
Jak dotąd widzieliśmy, wyjątek jest poza kontrolą programisty. Jednak obwinianie błędów w kodzie kwestiami środowiskowymi nie jest rozwiązaniem. Potrzebujesz solidnego programowania, które zajmie się wyjątkowymi sytuacjami. Taki kod jest tzw Obsługa wyjątków.
W naszym przykładzie dobrą obsługą wyjątków byłoby połączenie się z serwerem zapasowym, gdy serwer jest wyłączony.
Aby to wdrożyć, wprowadź swój kod, aby połączyć się z serwerem (używając tradycyjnych warunków if i else). Sprawdzisz, czy serwer jest wyłączony. Jeśli tak, napisz kod, aby połączyć się z serwerem zapasowym. Taka organizacja kodu, używając pętli „if” i „else” nie jest skuteczna, gdy kod ma wiele wyjątki Javy Poradzić sobie.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Spróbuj złapać blok
Java zapewnia wbudowaną wyjątkową obsługę.
- 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 do połączenia z serwerem. Blok CATCH będzie zawierał kod do połączenia z serwerem zapasowym. Jeśli serwer jest włączony, kod w bloku CATCH zostanie zignorowany. Jeśli serwer jest wyłączony, zostanie zgłoszony wyjątek, a kod w bloku catch zostanie wykonany.
A więc w ten sposób obsługiwany jest wyjątek Java.
Składnia użycia funkcji try & catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Przykład
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) Wyjątek arytmetyczny – dzielenie przez zero pokazano poniżej dla linii nr 5, a linia nr 6 nigdy nie jest wykonywana
Krok 4) Przyjrzyjmy się teraz, jak funkcja try i catch pomoże nam obsłużyć ten wyjątek. Umieścimy wyjątek powodujący linię kodu w pliku a 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 zauważyłeś, wyjątek jest obsługiwany i wykonywany jest także ostatni wiersz kodu. Należy również pamiętać, że linia nr 7 nie zostanie wykonana, ponieważ gdy tylko zostanie zgłoszony wyjątek, sterowanie przeskakuje do bloku catch.
Uwaga: Obiekt AritmeticException „e” zawiera informację o zaistniałym wyjątku, która może być przydatna przy podejmowaniu działań naprawczych.
Java Hierarchia klas wyjątków
Po wykonaniu jednej instrukcji catch pozostałe są pomijane i wykonywanie jest kontynuowane po bloku try/catch. Zagnieżdżone bloki catch są zgodne z hierarchią wyjątków.
- Wszystkie klasy wyjątków w Java rozszerz klasę „Throwable”. Throwable ma dwie podklasy: Błąd i Wyjątek
- Klasa Error definiuje wyjątek lub problemy, których wystąpienia nie oczekuje nasz program w normalnych okolicznościach, na przykład błąd pamięci, błąd sprzętowy, błąd JVM itp.
- Klasa wyjątku reprezentuje wyjątki, które może obsłużyć nasz program, a nasz program można odzyskać po tym wyjątku za pomocą bloku try i catch
- Wyjątek Runtime jest podklasą klasy wyjątków. Wyjątek tego typu reprezentuje wyjątek, który występuje w czasie wykonywania i którego nie można śledzić w czasie kompilacji. Doskonałym przykładem tego jest wyjątek dzielenia przez zero lub wyjątek wskaźnika zerowego itp.
- Wyjątek IO jest generowany podczas operacji wejścia i wyjścia
- Przerwane wyjątki w Java, jest generowany podczas przetwarzania wielowątkowego.
Przykład: Aby zrozumieć 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 linię nr 10 do linii nr 12. Zapisz, skompiluj i uruchom kod.
Krok 6) Błąd kompilacji? Dzieje się tak, ponieważ wyjątek jest klasą bazową wyjątku ArithmeticException. Każdy wyjątek zgłoszony przez wyjątek ArithmeticException może być również obsłużony przez klasę wyjątku. Zatem blok catch wyjątku 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.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
W przypadku zgłoszenia wyjątku w bloku try, blok ostatecznie jest wykonywany po wykonaniu bloku catch.
Przykład
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. Na koniec wykonywany jest blok, mimo że został zgłoszony wyjątek.
Krok 4) Zmień wartość zmiennej d = 1. Zapisz, skompiluj i uruchom kod i obserwuj wynik. Dół formularza
Podsumowanie
- An Wyjątek stanowi błąd wykonania co przerywa normalny przebieg wykonywania programu. Zakłócenie podczas wykonywania programu określane jest jako błąd lub wyjątek.
- Błędy dzieli się na dwie kategorie
- Błędy czasu kompilacji – błędy składniowe, błędy semantyczne
- Błędy w czasie wykonywania — wyjątek
- A solidny program powinien obsługiwać wszystkie wyjątki i kontynuować normalny przebieg wykonywania programu. Java zapewnia wbudowaną wyjątkową metodę obsługi
- Procedura obsługi wyjątków to zestaw kodu, który obsługuje wyjątek. Wyjątki można obsługiwać w Java za pomocą funkcji Try & Catch.
- Spróbuj zablokować: Normalny kod trafia do tego bloku.
- Złap blok: Jeśli w normalnym kodzie wystąpi błąd, zostanie on umieszczony w tym bloku