Ausnahmebehandlung in Java

⚡ Intelligente Zusammenfassung

Java Die Ausnahmebehandlung bietet einen strukturierten Mechanismus zur Behandlung von Laufzeitfehlern, die den normalen Programmablauf unterbrechen. Sie verwendet die Schlüsselwörter try, catch, finally, throw und throws, um Ausnahmezustände zu erkennen, zu isolieren und zu beheben, während gleichzeitig der Programmablauf aufrechterhalten wird.ping robuste und vorhersehbare Anwendungen.

  • ⚠️ Ausnahme definiert: Eine Ausnahme ist ein Laufzeitereignis, das die normale Ausführungssequenz unterbricht und als Objekt dargestellt wird, das den Fehlerzustand beschreibt.
  • 🧯 Versuch Catch Block: Um riskanten Code abzufangen, sollte ein try-Block eingeschlossen und anschließend ein oder mehrere catch-Blöcke hinzugefügt werden.
  • 🔁 Schließlich Verhalten: Der finally-Block wird immer nach try und catch ausgeführt und eignet sich daher ideal zum Schließen von Dateien und Sockets oder zum Freigeben anderer Systemressourcen.
  • ✅ Ausnahmehierarchie: Alle Ausnahmen erben von Throwable, welches sich in Error und Exception verzweigt, wobei RuntimeException ungeprüfte Fälle wie z. B. Division durch Null abdeckt.
  • 🧪 Best Practices: Fangen Sie zuerst die spezifischste Ausnahme ab, vermeiden Sie leere Catch-Blöcke, protokollieren Sie aussagekräftige Meldungen und verwenden Sie Multi-Catch, um den Code prägnant und wartbar zu halten.

Ausnahmebehandlung in Java

Was ist eine Ausnahme in Java?

An Ausnahme in Java Ein Fehler ist ein Ereignis, das die Ausführung von Programmanweisungen unterbricht und den normalen Programmablauf stört. Es handelt sich um ein Objekt, das die Fehlerinformationen eines innerhalb einer Methode aufgetretenen Fehlers kapselt und an das Laufzeitsystem übergeben wird. JavaAusnahmen dienen hauptsächlich dazu, verschiedene Arten von Fehlerzuständen zu signalisieren, damit Entwickler kontrolliert darauf reagieren können.

Es gibt zwei große Fehlerkategorien in Java:

  1. Fehler bei der Kompilierungszeit
  2. Laufzeitfehler

Kompilierzeitfehler lassen sich in zwei weitere Typen unterteilen:

  • Syntaxfehler
  • Semantische Fehler

Beispiel für Syntaxfehler:

Anstatt zu deklarieren int a; Sie haben es fälschlicherweise als angegeben in a;, woraufhin der Compiler einen Fehler ausgibt.

Beispiel für semantische Fehler: Sie haben eine Variable deklariert int a; und nach einigen Codezeilen deklarieren Sie erneut eine Ganzzahl als int a;. Alle diese Fehler werden hervorgehoben, wenn Sie den Code kompilieren.

Beispiel für Laufzeitfehler

Ein Laufzeitfehler wird als ein ExceptionEine Ausnahme ist jedes Ereignis, das den normalen Programmablauf unterbricht. Beispiele für Ausnahmen sind arithmetische Ausnahmen, NullPointerExceptions, Division-durch-Null-Ausnahmen und viele mehr. Java Es handelt sich dabei um Bedingungen, die oft außerhalb der direkten Kontrolle eines Entwicklers liegen.

Klicken Sie auf werden auf dieser Seite erläutert wenn das Video nicht zugänglich ist

Warum benötigen wir Ausnahmebehandlung?

Angenommen, Sie haben ein Programm geschrieben, um auf einen Server zuzugreifen. Während der Entwicklung funktioniert alles einwandfrei.ping den Code in einer lokalen Umgebung mit kontrollierten Bedingungen.

Java Ausnahmebehandlung

Während des laufenden Produktionsbetriebs kann der Server ausfallen. Wenn Ihr Programm versucht, darauf zuzugreifen, wird eine Ausnahme ausgelöst, und ohne entsprechende Behandlung wird das Programm abrupt beendet.

Java Ausnahmebehandlung

Wie man eine Ausnahme behandelt in Java

Bisher haben wir gesehen, dass Ausnahmen oft außerhalb der Kontrolle des Entwicklers liegen. Codefehler jedoch auf Umgebungsprobleme zu schieben, ist keine wirkliche Lösung. Es bedarf einer robusten Programmierung, die Ausnahmesituationen berücksichtigt. Solcher Code wird als Ausnahmebehandlung bezeichnet. Ausnahmebehandlung.

In unserem Beispiel würde eine gute Ausnahmebehandlung bedeuten, dass das Programm sich automatisch mit einem Backup-Server verbindet, wenn der primäre Server ausfällt.

Java Ausnahmebehandlung

Um dies umzusetzen, könnten Sie Code schreiben, der mithilfe herkömmlicher if- und else-Bedingungen eine Verbindung zum Server herstellt. Sie prüfen, ob der Server ausgefallen ist, und stellen in diesem Fall eine Verbindung zum Backup-Server her. Diese Art der Codeorganisation mit if- und else-Zweigen ist jedoch nicht effektiv, wenn Ihr Code mehrere … enthält. Java Ausnahmen zu handhaben.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Versuchen Sie, den Catch-Block in Java

Java bietet einen integrierten Ausnahmebehandlungsmechanismus, der die normale Logik von der Fehlerbehebungslogik trennt.

  1. Der normale Code geht in a TESTEN blockieren.
  2. Der Ausnahmebehandlungscode geht in die CATCH blockieren.

Versuchen Sie es mit Catch Block

In unserem Beispiel enthält der TRY-Block den Code zum Herstellen einer Verbindung zum Server. Der CATCH-Block enthält den Code zum Herstellen einer Verbindung zum Backup-Server. Ist der Server erreichbar, wird der Code im CATCH-Block ignoriert. Ist der Server nicht erreichbar, wird eine Ausnahme ausgelöst und der Code im CATCH-Block ausgeführt.

Versuchen Sie es mit Catch Block

So wird also eine Ausnahme behandelt in Java.

Syntax für die Verwendung von try und catch

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Beispiel eines Try-Catch-Blocks

Schritt 1) Kopieren Sie den folgenden Code in einen Editor.

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Schritt 2) Speichern Sie die Datei und kompilieren Sie den Code. Führen Sie das Programm mit dem Befehl „java“ aus. JavaAusnahme.

Schritt 3) Es wird eine arithmetische Ausnahme (Division durch Null) in Zeile 5 angezeigt, und Zeile 6 wird nie ausgeführt.

Schritt 4) Nun wollen wir untersuchen, wie uns try-catch bei der Behandlung dieser Ausnahme helfen. Wir werden die Codezeile, die die Ausnahme auslöst, in einen try-catch-Block einfügen. versuchen Block, gefolgt von a Fang Block. Kopieren Sie den folgenden Code in den Editor.

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");
 }
}

Schritt 5) Speichern, kompilieren und führen Sie den Code aus. Sie erhalten die folgende Ausgabe.

Versuchen Sie es mit Catch Block

Wie Sie sehen, wird die Ausnahme behandelt und die letzte Codezeile ausgeführt. Beachten Sie außerdem, dass Zeile 7 nicht ausgeführt wird, weil Sobald eine Ausnahme ausgelöst wird, springt der Kontrollfluss zum Catch-Block.

Hinweis: Das ArithmeticException-Objekt „e“ enthält Informationen über die aufgetretene Ausnahme, die bei der Durchführung von Wiederherstellungsmaßnahmen hilfreich sein können.

Java Ausnahmeklassenhierarchie

Nach Ausführung einer catch-Anweisung werden die übrigen übersprungen, und die Ausführung wird nach dem try-catch-Block fortgesetzt. Verschachtelte catch-Blöcke müssen der Ausnahmehierarchie von der spezifischsten Unterklasse zur allgemeinsten Oberklasse folgen.

Java Ausnahmehierarchie

  • Alle Ausnahmeklassen in Java Erweitere die Klasse Throwable. Throwable hat zwei Unterklassen, Error und Exception.
  • Die Klasse „Error“ definiert die Ausnahmen oder Probleme, die unter normalen Umständen in Ihrem Programm nicht auftreten sollten, zum Beispiel Speicherfehler, Hardwarefehler oder JVM-Fehler.
  • Die Exception-Klasse repräsentiert die Ausnahmen, die von Ihrem Programm behandelt werden können, und Ihr Programm kann sich mithilfe von try- und catch-Blöcken von diesen Ausnahmen erholen.
  • Eine RuntimeException ist eine Unterklasse der Exception-Klasse. Ausnahmen dieses Typs stellen ungeprüfte Ausnahmen dar, die zur Laufzeit auftreten und nicht zur Kompilierzeit erkannt werden können. Beispiele hierfür sind die Division durch Null und die Nullzeiger-Ausnahme.
  • Bei Eingabe- und Ausgabevorgängen wird eine IOException ausgelöst.
  • InterruptedException in Java wird während Multithread-Operationen generiert, wenn ein Thread unterbrochen wird.

Beispiel: Verschachtelung von try- und catch-Blöcken

Schritt 1) Kopieren Sie den folgenden Code in einen Editor.

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");
 }
}

Schritt 2) Speichern Sie die Datei und kompilieren Sie den Code. Führen Sie das Programm mit folgendem Befehl aus: Java JavaException.

Schritt 3) Es wird eine ArrayIndexOutOfBoundsException ausgelöst. Ändern Sie den Wert von int d auf 0. Speichern, kompilieren und führen Sie den Code aus.

Schritt 4) Es muss eine ArithmeticException ausgelöst werden.

Schritt 5) Entfernen Sie die Kommentarzeichen in den Zeilen 10 bis 12. Speichern, kompilieren und führen Sie den Code aus.

Schritt 6) Kompilierungsfehler? Das liegt daran, dass `Exception` die Basisklasse von `ArithmeticException` ist. Jede Ausnahme, die von `ArithmeticException` ausgelöst wird, kann auch von der Klasse `Exception` behandelt werden. Daher wird der `catch`-Block von `ArithmeticException` nie ausgeführt und ist somit überflüssig. Dies führt zu dem Kompilierungsfehler.

Java Endlich blockieren

Der „finally“-Block ist wird unabhängig davon ausgeführt, ob eine Ausnahme ausgelöst wurde im try-Block. Es ist optional Zur Verwendung mit einem try-Block. Der finally-Block ist der richtige Ort, um Ressourcen wie Datenbankverbindungen, Dateien oder Netzwerk-Sockets freizugeben.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Wird im try-Block eine Ausnahme ausgelöst, wird der finally-Block ausgeführt, nachdem der catch-Block abgeschlossen ist.

Beispiel für einen finally-Block

Schritt 1) Kopieren Sie den folgenden Code in einen Editor.

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");
  }
}
}

Schritt 2) Den Code speichern, kompilieren und ausführen.

Schritt 3) Erwartete Ausgabe: Der finally-Block wird ausgeführt, obwohl eine Ausnahme ausgelöst wird.

Schritt 4) Ändere den Wert der Variablen d auf 1. Speichere, kompiliere und führe den Code aus und beobachte die Ausgabe.

Best Practices für Java Ausnahmebehandlung

Wenn Sie ein paar bewährte Regeln befolgen, können Sie Ihre Java Robuster, lesbarer und leicht zu debuggender Code:

  • Fangen Sie zuerst die spezifischste Ausnahme ab, dann die allgemeineren, um die Integrität der Ausnahmehierarchie zu wahren.
  • Vermeiden Sie leere Catch-Blöcke. Protokollieren Sie zumindest die Ausnahme, damit die Ursache niemals verloren geht.
  • Verwenden Sie den finally-Block oder versuchen Sie es mit resources, um Dateien, Sockets und Datenbankverbindungen freizugeben.
  • Geprüfte Ausnahmen sollten nur dann ausgelöst werden, wenn der Aufrufer den Fehler in angemessener Weise beheben kann. Ungeprüfte Ausnahmen sollten für Programmierfehler verwendet werden.
  • Um die API-Kontrolle aufrechtzuerhalten, sollten Ausnahmen niedriger Ebene in aussagekräftige Geschäftsausnahmen eingebettet werden.tracts sauber.
  • InterruptedException wird in Multithread-Code niemals stillschweigend unterdrückt; stattdessen muss das Interrupt-Flag wiederhergestellt werden.

Häufig gestellte Fragen

Geprüfte Ausnahmen werden zur Kompilierzeit verifiziert und müssen deklariert oder abgefangen werden, wie beispielsweise IOException. Ungeprüfte Ausnahmen erweitern RuntimeException, treten zur Laufzeit auf und erfordern keine obligatorische Behandlung, wie beispielsweise NullPointerException oder ArithmeticException.

Der finally-Block wird immer nach den try- und catch-Blöcken ausgeführt, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht. Er ist der sicherste Ort, um Ressourcen wie Dateihandles, Datenbankverbindungen oder Sockets freizugeben und so einen sauberen Abschluss der Operationen zu gewährleisten.

Das Schlüsselwort throw wird innerhalb einer Methode verwendet, um tatsächlich ein Ausnahmeobjekt auszulösen, während throws in einer Methodensignatur verwendet wird, um zu deklarieren, dass die Methode bestimmte geprüfte Ausnahmen zur Behandlung an ihren Aufrufer weitergeben kann.

Ja. Auf einen try-Block kann ohne catch-Block ein finally-Block folgen. Dieses Muster wird verwendet, wenn der Entwickler sicherstellen möchte, dass Aufräumcode ausgeführt wird, selbst wenn die Ausnahme an den Aufrufer weitergegeben wird.

Ja. KI-gestützte Observability-Tools analysieren den Stack. tracSie analysieren Protokolle und Codepfade, um vorherzusagen, wo Laufzeitfehler wahrscheinlich auftreten. Sie schlagen defensive Prüfungen vor, empfehlen die Platzierung von Catch-Blöcken und decken Anomalien auf.ping Teams verhindern Abstürze, bevor sie in die Produktion gelangen.

KI-Assistenten analysieren den Stapel tracSie korrelieren diese mit dem Quellcode und schlagen wahrscheinliche Ursachen sowie Lösungen vor. Sie generieren Try-Catch-Vorlagen, empfehlen Verbesserungen der Protokollierung und schreiben sogar fehlerhafte Methoden neu, wodurch der Zeitaufwand für die Fehlersuche drastisch reduziert wird. Java Ausnahmen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: