logo

Ausnahmen in Java

Ausnahmebehandlung in Java ist eines der wirksamsten Mittel zur Behandlung von Laufzeitfehlern, sodass der reguläre Ablauf der Anwendung aufrechterhalten werden kann. Die Java-Ausnahmebehandlung ist ein Mechanismus zur Behandlung von Laufzeitfehlern wie ClassNotFoundException, IOException, SQLException, RemoteException usw.

Was sind Java-Ausnahmen?

In Java, Ausnahme ist ein unerwünschtes oder unerwartetes Ereignis, das während der Ausführung eines Programms, d. h. zur Laufzeit, auftritt und den normalen Ablauf der Programmanweisungen stört. Ausnahmen können vom Programm abgefangen und behandelt werden. Wenn innerhalb einer Methode eine Ausnahme auftritt, wird ein Objekt erstellt. Dieses Objekt wird als Ausnahmeobjekt bezeichnet. Es enthält Informationen zur Ausnahme, beispielsweise den Namen und die Beschreibung der Ausnahme sowie den Status des Programms, als die Ausnahme auftrat.



Hauptgründe, warum eine Ausnahme auftritt

  • Ungültige Benutzereingabe
  • Gerätefehler
  • Verlust der Netzwerkverbindung
  • Physische Einschränkungen (Speicher außerhalb der Festplatte)
  • Codefehler
  • Öffnen einer nicht verfügbaren Datei

Fehler stellen unwiederbringliche Zustände dar, wie zum Beispiel, dass der Java Virtual Machine (JVM) der Speicher ausgeht, Speicherlecks, Stapelüberlauffehler, Bibliotheksinkompatibilität, unendliche Rekursion usw. Fehler liegen normalerweise außerhalb der Kontrolle des Programmierers und wir sollten nicht versuchen, mit Fehlern umzugehen.

Unterschied zwischen Fehler und Ausnahme

Lassen Sie uns den wichtigsten Teil besprechen, nämlich den Unterschiede zwischen Fehler und Ausnahme das ist wie folgt:

  • Fehler: Ein Fehler weist auf ein schwerwiegendes Problem hin, das eine vernünftige Anwendung nicht beheben sollte.
  • Ausnahme: Eine Ausnahme weist auf Bedingungen hin, die eine vernünftige Anwendung möglicherweise abzufangen versucht.

Ausnahmehierarchie

Alle Ausnahme- und Fehlertypen sind Unterklassen der Klasse Wurfbar , die Basisklasse der Hierarchie. Eine Niederlassung wird geleitet von Ausnahme . Diese Klasse wird für außergewöhnliche Bedingungen verwendet, die Benutzerprogramme abfangen sollen. NullPointerException ist ein Beispiel für eine solche Ausnahme. Eine weitere Filiale, Fehler wird vom Java-Laufzeitsystem verwendet( JVM ), um auf Fehler hinzuweisen, die mit der Laufzeitumgebung selbst (JRE) zu tun haben. StackOverflowError ist ein Beispiel für einen solchen Fehler.



Ausnahmehierarchie in Java

Java-Ausnahmehierarchie

Arten von Ausnahmen

Java definiert verschiedene Arten von Ausnahmen, die sich auf seine verschiedenen Klassenbibliotheken beziehen. Java ermöglicht es Benutzern auch, ihre eigenen Ausnahmen zu definieren.

Arten von Ausnahmen in Java

Ausnahmen können auf zwei Arten kategorisiert werden:



  1. Integrierte Ausnahmen
    • Geprüfte Ausnahme
    • Ungeprüfte Ausnahme
  2. Benutzerdefinierte Ausnahmen

Lassen Sie uns die oben definierte Ausnahme besprechen, die wie folgt lautet:

1. Integrierte Ausnahmen

Integrierte Ausnahmen sind die Ausnahmen, die in Java-Bibliotheken verfügbar sind. Diese Ausnahmen sind geeignet, bestimmte Fehlersituationen zu erklären.

  • Geprüfte Ausnahmen: Überprüfte Ausnahmen werden als Ausnahmen zur Kompilierungszeit bezeichnet, da diese Ausnahmen zur Kompilierungszeit vom Compiler überprüft werden.
  • Ungeprüfte Ausnahmen: Die ungeprüften Ausnahmen sind das genaue Gegenteil der geprüften Ausnahmen. Der Compiler prüft diese Ausnahmen zur Kompilierungszeit nicht. Mit einfachen Worten: Wenn ein Programm eine ungeprüfte Ausnahme auslöst und wir diese nicht behandeln oder deklarieren, gibt das Programm keinen Kompilierungsfehler aus.

Notiz: Informationen zu aktivierten und nicht aktivierten Ausnahmen finden Sie unter Geprüfte vs. ungeprüfte Ausnahmen

2. Benutzerdefinierte Ausnahmen:

Manchmal sind die in Java integrierten Ausnahmen nicht in der Lage, eine bestimmte Situation zu beschreiben. In solchen Fällen können Benutzer auch Ausnahmen erstellen, die als „benutzerdefinierte Ausnahmen“ bezeichnet werden.

Der Vorteile der Ausnahmebehandlung in Java sind wie folgt:

  1. Bereitstellung zur Vervollständigung der Programmausführung
  2. Einfache Identifizierung von Programmcode und Fehlerbehandlungscode
  3. Ausbreitung von Fehlern
  4. Aussagekräftige Fehlerberichte
  5. Fehlertypen identifizieren

Methoden zum Drucken der Ausnahmeinformationen:

1. printStackTrace()

Diese Methode gibt Ausnahmeinformationen im folgenden Format aus: Name der Ausnahme: Beschreibung der Ausnahme, Stack-Trace.

Beispiel:

kostenlose ipconfig

Java




//program to print the exception information using printStackTrace() method> > import> java.io.*;> > class> GFG {> >public> static> void> main (String[] args) {> >int> a=>5>;> >int> b=>0>;> >try>{> >System.out.println(a/b);> >}> >catch>(ArithmeticException e){> >e.printStackTrace();> >}> >}> }>

>

>

Ausgabe

java.lang.ArithmeticException: / by zero at GFG.main(File.java:10)>

2. toString()

Die toString()-Methode gibt Ausnahmeinformationen im Format Name der Ausnahme: Beschreibung der Ausnahme aus.

Beispiel:

Java




mycricketlive

//program to print the exception information using toString() method> > import> java.io.*;> > class> GFG1 {> >public> static> void> main (String[] args) {> >int> a=>5>;> >int> b=>0>;> >try>{> >System.out.println(a/b);> >}> >catch>(ArithmeticException e){> >System.out.println(e.toString());> >}> >}> }>

>

>

Ausgabe

java.lang.ArithmeticException: / by zero>

3. getMessage()

Die Methode getMessage() gibt nur die Beschreibung der Ausnahme aus.

Beispiel:

Java




//program to print the exception information using getMessage() method> > import> java.io.*;> > class> GFG1 {> >public> static> void> main (String[] args) {> >int> a=>5>;> >int> b=>0>;> >try>{> >System.out.println(a/b);> >}> >catch>(ArithmeticException e){> >System.out.println(e.getMessage());> >}> >}> }>

>

>

Ausgabe

String in ganze Zahlen umwandeln
/ by zero>

Wie geht JVM mit einer Ausnahme um?

Standard-Ausnahmebehandlung: Immer wenn innerhalb einer Methode eine Ausnahme aufgetreten ist, erstellt die Methode ein Objekt, das als Ausnahmeobjekt bezeichnet wird, und übergibt es an das Laufzeitsystem (JVM). Das Ausnahmeobjekt enthält den Namen und die Beschreibung der Ausnahme sowie den aktuellen Status des Programms, in dem die Ausnahme aufgetreten ist. Das Erstellen des Ausnahmeobjekts und dessen Handhabung im Laufzeitsystem wird als Auslösen einer Ausnahme bezeichnet. Möglicherweise gibt es eine Liste der Methoden, die aufgerufen wurden, um zu der Methode zu gelangen, bei der eine Ausnahme aufgetreten ist. Diese geordnete Liste von Methoden wird aufgerufen Call Stack . Nun geschieht folgender Vorgang.

  • Das Laufzeitsystem durchsucht den Aufrufstapel nach der Methode, die einen Codeblock enthält, der die aufgetretene Ausnahme behandeln kann. Der Block des Codes heißt an Ausnahmehandler .
  • Das Laufzeitsystem beginnt mit der Suche bei der Methode, bei der die Ausnahme aufgetreten ist, und durchläuft den Aufrufstapel in der umgekehrten Reihenfolge, in der die Methoden aufgerufen wurden.
  • Wenn es einen geeigneten Handler findet, übergibt es die aufgetretene Ausnahme an diesen. Ein geeigneter Handler bedeutet, dass der Typ des ausgelösten Ausnahmeobjekts mit dem Typ des Ausnahmeobjekts übereinstimmt, den er verarbeiten kann.
  • Wenn das Laufzeitsystem alle Methoden auf dem Aufrufstapel durchsucht und keinen geeigneten Handler gefunden hat, übergibt das Laufzeitsystem das Ausnahmeobjekt an den Standard-Ausnahmebehandler , das Teil des Laufzeitsystems ist. Dieser Handler gibt die Ausnahmeinformationen im folgenden Format aus und beendet das Programm ungewöhnlich .
Exception in thread 'xxx' Name of Exception : Description ... ...... .. // Call Stack>

Sehen Sie sich das folgende Diagramm an, um den Ablauf des Aufrufstapels zu verstehen.

Ablauf des Klassenstapels für Ausnahmen in Java

Illustration:

Java




// Java Program to Demonstrate How Exception Is Thrown> > // Class> // ThrowsExecp> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Taking an empty string> >String str =>null>;> >// Getting length of a string> >System.out.println(str.length());> >}> }>

>

>

Ausgabe

Programmausgabe

Sehen wir uns ein Beispiel an, das veranschaulicht, wie ein Laufzeitsystem im Aufrufstapel nach geeignetem Ausnahmebehandlungscode sucht.

Beispiel:

Java




// Java Program to Demonstrate Exception is Thrown> // How the runTime System Searches Call-Stack> // to Find Appropriate Exception Handler> > // Class> // ExceptionThrown> class> GFG {> > >// Method 1> >// It throws the Exception(ArithmeticException).> >// Appropriate Exception handler is not found> >// within this method.> >static> int> divideByZero(>int> a,>int> b)> >{> > >// this statement will cause ArithmeticException> >// (/by zero)> >int> i = a / b;> > >return> i;> >}> > >// The runTime System searches the appropriate> >// Exception handler in method also but couldn't have> >// found. So looking forward on the call stack> >static> int> computeDivision(>int> a,>int> b)> >{> > >int> res =>0>;> > >// Try block to check for exceptions> >try> {> > >res = divideByZero(a, b);> >}> > >// Catch block to handle NumberFormatException> >// exception Doesn't matches with> >// ArithmeticException> >catch> (NumberFormatException ex) {> >// Display message when exception occurs> >System.out.println(> >'NumberFormatException is occurred'>);> >}> >return> res;> >}> > >// Method 2> >// Found appropriate Exception handler.> >// i.e. matching catch block.> >public> static> void> main(String args[])> >{> > >int> a =>1>;> >int> b =>0>;> > >// Try block to check for exceptions> >try> {> >int> i = computeDivision(a, b);> >}> > >// Catch block to handle ArithmeticException> >// exceptions> >catch> (ArithmeticException ex) {> > >// getMessage() will print description> >// of exception(here / by zero)> >System.out.println(ex.getMessage());> >}> >}> }>

>

>

Ausgabe

/ by zero>

Wie gehen Programmierer mit einer Ausnahme um?

Angepasste Ausnahmebehandlung: Die Java-Ausnahmebehandlung wird über fünf Schlüsselwörter verwaltet: versuchen , fangen , werfen , wirft , Und Endlich . Kurz gesagt, hier ist, wie sie funktionieren. Programmanweisungen, von denen Sie glauben, dass sie Ausnahmen auslösen können, sind in einem Try-Block enthalten. Wenn innerhalb des Try-Blocks eine Ausnahme auftritt, wird diese ausgelöst. Ihr Code kann diese Ausnahme abfangen (mithilfe des Catch-Blocks) und auf rationale Weise behandeln. Vom System generierte Ausnahmen werden automatisch vom Java-Laufzeitsystem ausgelöst. Um eine Ausnahme manuell auszulösen, verwenden Sie das Schlüsselwort throw. Jede Ausnahme, die von einer Methode ausgelöst wird, muss als solche durch eine throws-Klausel angegeben werden. Jeder Code, der nach Abschluss eines Try-Blocks unbedingt ausgeführt werden muss, wird in einen Final-Block eingefügt.

Tipp: Man muss durch Kontrollfluss im Try-Catch-Block zum besseren Verständnis.

Notwendigkeit einer Try-Catch-Klausel (benutzerdefinierte Ausnahmebehandlung)

Betrachten Sie das folgende Programm, um die Try-Catch-Klausel besser zu verstehen.

Beispiel:

Java




// Java Program to Demonstrate> // Need of try-catch Clause> > // Class> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Taking an array of size 4> >int>[] arr =>new> int>[>4>];> > >// Now this statement will cause an exception> >int> i = arr[>4>];> > >// This statement will never execute> >// as above we caught with an exception> >System.out.println(>'Hi, I want to execute'>);> >}> }>

>

nfa zu dfa
>

Ausgabe

Programmausgabe

Ausgabeerklärung: Im obigen Beispiel ist ein Array mit der Größe definiert, d. h. Sie können nur auf Elemente von Index 0 bis 3 zugreifen. Wenn Sie jedoch (aus Versehen) versuchen, auf die Elemente bei Index 4 zuzugreifen, wird eine Ausnahme ausgelöst. In diesem Fall beendet JVM das Programm ungewöhnlich . Die Anweisung System.out.println(Hallo, ich möchte ausführen); wird niemals ausgeführt. Um es auszuführen, müssen wir die Ausnahme mit Try-Catch behandeln. Um den normalen Programmablauf fortzusetzen, benötigen wir daher eine Try-Catch-Klausel.

Wie verwende ich die Try-Catch-Klausel?

try {  // block of code to monitor for errors  // the code you think can raise an exception } catch (ExceptionType1 exOb) {  // exception handler for ExceptionType1 } catch (ExceptionType2 exOb) {  // exception handler for ExceptionType2 } // optional finally { // block of code to be executed after try block ends  }>

Bestimmte wichtige Punkte müssen beachtet werden:

  • In einer Methode kann es mehr als eine Anweisung geben, die möglicherweise eine Ausnahme auslöst. Platzieren Sie daher alle diese Anweisungen in ihren eigenen versuchen blockieren und einen separaten Ausnahmehandler in ihrem eigenen bereitstellen fangen Block für jeden von ihnen.
  • Wenn eine Ausnahme innerhalb der auftritt versuchen Block wird diese Ausnahme von dem ihr zugeordneten Ausnahmehandler behandelt. Um den Ausnahmehandler zuzuordnen, müssen wir a einfügen fangen Block danach. Es kann mehr als einen Ausnahmebehandler geben. Jede fangen block ist ein Ausnahmebehandler, der die Ausnahme für den durch sein Argument angegebenen Typ behandelt. Das Argument ExceptionType deklariert den Ausnahmetyp, den es behandeln kann, und muss der Name der Klasse sein, die von erbt Wurfbar Klasse.
  • Für jeden Try-Block kann es null oder mehr Catch-Blöcke geben, aber einziger letzter Block.
  • Der „finally“-Block ist optional. Es wird immer ausgeführt, unabhängig davon, ob im Try-Block eine Ausnahme aufgetreten ist oder nicht. Wenn eine Ausnahme auftritt, wird sie anschließend ausgeführt Versuchen Sie, Blöcke zu fangen. Und wenn eine Ausnahme nicht auftritt, wird sie nach dem ausgeführt versuchen Block. Der „finally“-Block in Java wird verwendet, um wichtige Codes wie Bereinigungscode einzufügen, z. B. das Schließen der Datei oder das Schließen der Verbindung.
  • Wenn wir System.exit in den Try-Block schreiben, wird der Final-Block nicht ausgeführt.

Die Zusammenfassung wird unten visuell wie folgt dargestellt:

Ausnahmen in Java

In Verbindung stehende Artikel:

Ähnliche Kurse

Java Programming Foundation – Kurs zum Selbststudium

Finden Sie den richtigen Kurs für Sie, um mit dem Erlernen der Java Programming Foundation von Branchenexperten mit langjähriger Erfahrung zu beginnen. Das Java Programming Foundation – Kurs zum Selbststudium behandelt die Grundlagen der Java-Programmiersprache, Datentypen, Operatoren und Flusskontrolle, Schleifen, Strings , und vieles mehr. Kein Warten mehr! Beginnen Sie jetzt mit dem Erlernen von JAVA und werden Sie ein umfassender Java-Ingenieur!