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.

  • ⚠️ Definicja wyjątku: Wyjątek to zdarzenie w czasie wykonywania, które przerywa standardową sekwencję wykonywania i jest reprezentowane jako obiekt opisujący warunek błędu.
  • 🧯 Wypróbuj blok Catch: Umieść ryzykowny kod wewnątrz bloku try i umieść po nim jeden lub więcej bloków catch, aby elegancko wychwycić określone typy wyjątków.
  • 🔁 Na koniec zachowanie: Blok Finally jest zawsze wykonywany po try i catch, co czyni go idealnym do zamykania plików, gniazd lub zwalniania innych zasobów systemowych.
  • Hierarchia wyjątków: Wszystkie wyjątki dziedziczą po Throwable, który rozgałęzia się na Error i Exception, przy czym RuntimeException obejmuje niesprawdzane przypadki, takie jak dzielenie przez zero.
  • 🧪 Najlepsze Praktyki: Najpierw wyłapuj najbardziej szczegółowe wyjątki, unikaj pustych bloków catch, rejestruj znaczące komunikaty i korzystaj z bloków multi-catch, aby kod był zwięzły i łatwy w utrzymaniu.

Obsługa wyjątków Java

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:

  1. Błędy czasu kompilacji
  2. 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.

Java Obsługa wyjątków

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.

Java Obsługa wyjątków

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.

Java Obsługa wyjątków

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.

  1. Normalny kod trafia do a PRÓBOWAĆ blok.
  2. Kod obsługi wyjątków trafia do pliku CATCH blok.

Spróbuj złapać 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.

Spróbuj złapać blok

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.

Spróbuj złapać blok

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.

Java Hierarchia wyjątków

  • 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.

FAQ

Wyjątki sprawdzane są weryfikowane w czasie kompilacji i muszą zostać zadeklarowane lub przechwycone, na przykład IOException. Wyjątki niesprawdzane rozszerzają RuntimeException, występują w czasie wykonywania i nie wymagają obowiązkowej obsługi, na przykład NullPointerException lub ArithmeticException.

Blok Finally jest zawsze uruchamiany po blokach try i catch, niezależnie od tego, czy wystąpił wyjątek, czy nie. To najbezpieczniejsze miejsce na zwolnienie zasobów, takich jak uchwyty plików, połączenia z bazą danych czy gniazda, zapewniając czyste zakończenie operacji.

Słowo kluczowe throw jest używane wewnątrz metody w celu faktycznego wygenerowania obiektu wyjątku, natomiast throws jest używane w sygnaturze metody w celu zadeklarowania, że ​​metoda może przekazać określone sprawdzone wyjątki do swojego wywołania w celu obsłużenia.

Tak. Po bloku try może następować blok Finally bez bloku catch. Ten wzorzec jest używany, gdy programista chce mieć pewność, że kod czyszczący zostanie wykonany, mimo że sam wyjątek został przekazany do wywołującego.

Tak. Narzędzia do obserwacji oparte na sztucznej inteligencji analizują stos traces, logi i ścieżki kodu, aby przewidzieć, gdzie prawdopodobnie wystąpią wyjątki w czasie wykonywania. Sugerują one kontrole obronne, zalecają umiejscowienie catch i wykrywają anomalie.ping Zespoły zapobiegają wypadkom zanim sprzęt dotrze do produkcji.

Asystenci AI analizują stos traces, korelują je z kodem źródłowym i sugerują prawdopodobne przyczyny oraz rozwiązania. Generują szablony try-catch, zalecają ulepszenia w logowaniu, a nawet przepisują wadliwe metody, znacznie skracając czas, jaki programiści poświęcają na diagnozowanie. Java wyjątki.

Podsumuj ten post następująco: