Co to jest wyjątek w Javie?
Wyjątek w Javie to zdarzenie, które przerywa wykonywanie instrukcji programu i zakłóca normalny przebieg wykonywania programu. Jest to obiekt, który opakowuje informację o zdarzeniu błędu, które wystąpiło w metodzie i jest przekazywany do systemu wykonawczego. W Javie wyjątki są używane głównie do wskazywania różnych typów błędów.
W tym samouczku nauczysz się:
- Co to jest wyjątek?
- Dlaczego potrzebujemy wyjątku?
- Jak obsługiwać wyjątek
- Spróbuj Catch Block
- Klasa wyjątków Java Hierarchia
- Java w końcu blok
Istnieją dwa rodzaje błędów:
- Błędy czasu kompilacji
- Błędy w czasie wykonywania
Błędy czasu kompilacji można ponownie podzielić na dwa typy:
- Błędy składniowe
- Błędy semantyczne
Błędy składniowe Przykład:
Zamiast deklarować
int a;
omyłkowo zadeklarowałeś, in a;
dla którego kompilatora wystąpi błąd.
Przykład: Zadeklarowałeś zmienną
int a;
a po kilku wierszach kodu ponownie deklarujesz liczbę całkowitą jako int a;
. Wszystkie te błędy są podświetlane podczas kompilacji kodu.
Przykład błędów w czasie wykonywania
Błąd środowiska wykonawczego nazywany jest błędem wyjątków . 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 Dzielenie przez zero itp.
Wyjątki w Javie są poza kontrolą programistów.
Kliknij tutaj, jeśli wideo nie jest dostępne
Dlaczego potrzebujemy wyjątku?
Załóżmy, że zakodowałeś program, aby uzyskać dostęp do serwera. Podczas tworzenia kodu wszystko działało dobrze.
Podczas rzeczywistego przebiegu produkcyjnego serwer nie działa. Gdy program próbował uzyskać do niego dostęp, zgłaszany jest wyjątek.
Jak obsługiwać wyjątek
Jak dotąd widzieliśmy, wyjątek jest poza kontrolą programisty. Ale obwinianie błędu kodu za kwestie środowiskowe nie jest rozwiązaniem. Potrzebujesz solidnego programowania, które zajmie się wyjątkowymi sytuacjami. Taki kod jest znany jako program obsługi 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 zaimplementować, wprowadź swój kod, aby połączyć się z serwerem (używając tradycyjnych warunków if i else).
Sprawdzisz, czy serwer nie działa. Jeśli tak, napisz kod, aby połączyć się z serwerem zapasowym.
Taka organizacja kodu przy użyciu pętli „if” i „else” nie jest skuteczna, gdy kod ma do obsługi wiele wyjątków Java.
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
Spróbuj Catch Block
Java zapewnia wbudowaną wyjątkową obsługę.
- Normalny kod przechodzi do bloku TRY .
- Kod obsługi wyjątków trafia do bloku CATCH
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.
W przypadku, gdy serwer nie działa, kod w bloku CATCH zostanie zignorowany. W przypadku awarii serwera zgłaszany jest wyjątek, a kod w bloku catch zostanie wykonany.
Tak więc wyjątek jest obsługiwany w Javie.
Składnia używania 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 JavaException
Krok 3) Wyjątek arytmetyczny - dzielenie przez zero jest pokazane jak poniżej dla wiersza nr 5, a wiersz nr 6 nigdy nie jest wykonywany
Krok 4) Zobaczmy teraz, jak metoda try and catch pomoże nam poradzić sobie z tym wyjątkiem. Wyjątek powodujący wiersz kodu umieścimy w bloku try , po którym nastąpi blok catch . Skopiuj następujący 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, a otrzymasz następujące dane wyjściowe
Jak widać, wyjątek jest obsługiwany i wykonywany jest również ostatni wiersz kodu. Należy również zauważyć, że wiersz # 7 nie zostanie wykonany, ponieważ gdy tylko zostanie podniesiony wyjątek, przepływ sterowania przeskakuje do bloku catch.
Uwaga: Obiekt AritmeticException „e” zawiera informacje o wyjątku, który wystąpił, co może być przydatne podczas wykonywania działań naprawczych.
Klasa wyjątków Java Hierarchia
Po wykonaniu jednej instrukcji catch pozostałe są pomijane, a 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 Javie rozszerzają klasę „Throwable”. Throwable ma dwie podklasy, Error i Exception
- Klasa Error definiuje wyjątek lub problemy, które nie powinny wystąpić w normalnych okolicznościach przez nasz program, na przykład błąd pamięci, błąd sprzętu, błąd maszyny JVM itp.
- Klasa Exception reprezentuje wyjątki, które mogą być obsługiwane przez nasz program, a nasz program można odzyskać z tego wyjątku za pomocą bloku try and catch
- Wyjątek środowiska wykonawczego jest podklasą klasy wyjątków. Wyjątki tego typu reprezentują 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 dzielenie przez wyjątek zerowy lub wyjątek zerowego wskaźnika itp
- Wyjątek IO jest generowany podczas operacji wejścia i wyjścia
- Przerwane wyjątki w Javie są generowane podczas wielowątkowości.
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 java JavaException .
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 wiersz nr 10 do wiersza nr 12. Zapisz, skompiluj i uruchom kod.
Krok 6) Błąd kompilacji? Dzieje się tak, ponieważ Exception jest klasą bazową ArithmeticException Exception. Każdy wyjątek, który jest wywoływany przez ArithmeticException, może być również obsługiwany przez klasę Exception, więc blok catch ArithmeticException nigdy nie będzie miał szansy na wykonanie, co czyni go zbędnym. Stąd błąd kompilacji.
Java w końcu blok
Ostatni blok jest wykonywany niezależnie od tego, czy w bloku try został zgłoszony wyjątek . Używanie go z blokiem try jest opcjonalne .
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
W przypadku, gdy wyjątek zostanie zgłoszony w bloku try, ostatecznie blok 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) Oczekiwane wyniki. Ostatecznie blok jest wykonywany, nawet jeśli został zgłoszony wyjątek.
Krok 4) Zmień wartość zmiennej d = 1. Zapisz, skompiluj i uruchom kod oraz obserwuj wynik.
Podsumowanie :
- Wyjątkiem jest błąd run-time , która przerywa normalny przepływ programu execution.Disruption podczas realizacji programu jest określany jako błędu lub wyjątku.
- Błędy są podzielone na dwie kategorie
- Błędy czasu kompilacji - błędy składniowe, błędy semantyczne
- Błędy w czasie wykonywania - wyjątek
- Solidny program powinien obsługiwać wszystkie wyjątki i kontynuować jego normalnego przepływu wykonywania programu. Java zapewnia wbudowaną wyjątkową metodę obsługi
- Exception Handler to zestaw kodu, który obsługuje wyjątek . Wyjątki można obsługiwać w Javie za pomocą try & catch.
- Blok próbny: w tym bloku przechodzi normalny kod.
- Blok przechwytywania : jeśli wystąpi błąd w normalnym kodzie, przejdzie do tego bloku