Fürchten Sie Fehler, aber schreiben Sie sie nicht in Java! Sie wissen wahrscheinlich bereits einiges über Ausnahmen in Java . Heute wird Ihnen zumindest ein oberflächliches Wissen von Nutzen sein. Wir werden die Error-Klasse und einen speziellen Ausnahmetyp analysieren, der viele Leute erschreckt, wenn er in ihren Stacktraces auftaucht.

An der Spitze der Ausnahmehierarchie von Java steht die Throwable- Klasse, die zwei Nachkommen hat:

  • Ausnahme , die für Fehler in Ihrem Programm verantwortlich ist.
  • Und unser Held für heute – Error , der für Fehler in der JVM verantwortlich ist.
    Erwähnenswert ist, dass es sich hierbei wahrscheinlich nicht einmal um Programmierfehler handelt, sondern eher um Probleme, die normalerweise nicht vom Entwickler abhängen.

Was tun bei einem Fehler?

Beim Abfangen von „Fehlern“ können Sie außer der Protokollierung keine Aktionen im Catch- Block ausführen , da es sich um Probleme in der JVM selbst handelt.

Die Protokollierung ist gut: Wenn Sie einen Laufzeitfehler erhalten, können Sie sich die Protokolle ansehen, die Ursache erkennen und wissen, was zu beheben ist.

Da Sie nicht wissen, welche Art von Fehler beim Schreiben Ihres Codes auftreten könnte, macht es keinen Sinn, einen bestimmten Typ in den Catch- Block zu schreiben. Auch die Verwendung der Error- Klasse selbst ist nicht die beste Lösung, da in diesem Fall nur Fehler abgefangen werden.

Dementsprechend ist es besser, die Throwable -Klasse zu verwenden , die sowohl Error als auch Exception abfangen kann . Wie sieht das in der Praxis aus?

Es ist nicht in Ordnung, Code wie diesen zu schreiben:

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
Code wie diesen zu schreiben ist auch nicht in Ordnung:

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
Aber Code wie dieser ist in Ordnung:

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

Die zweite Möglichkeit zur Behandlung von Fehlern besteht darin, sie nach der Deklaration einer throws- Klausel für die Methode nach oben zu werfen . Diese Technik wird verwendet, wenn Ihr Code theoretisch einen Fehler auslösen könnte und Sie alle Personen, die Ihren Code verwenden könnten, vorab warnen möchten, damit sie den Fehler ordnungsgemäß behandeln können.

Häufige Fehler

Zu den häufigsten Fehlern gehören die Klassen OutOfMemoryError und StackOverflowError .

OutOfMemoryError tritt häufig auf, wenn das Programm nicht über genügend Speicher zum Erstellen von Objekten verfügt und der Garbage Collector nicht mithalten kann. Das Ergebnis ist ein OutOfMemoryError .

In Java können Sie Objekte nicht manuell löschen, um Speicherlecks zu verhindern. Sie können jedoch Littering vermeiden, um den Garbage Collector nicht zu überlasten und den Heap nicht zu überladen.

Code wie dieser erzeugt beispielsweise viel Müll im Speicher:


while (true) {
    new Object();
}

Der zweite Fehler, über den ich Ihnen berichten möchte, ist der StackOverflowError , der ausgelöst wird, wenn der Stapel überläuft. Da der Stack hauptsächlich lokale Variablen, Parameter und Methodenaufrufe speichert, ist Rekursion (oder ein rekursiver Methodenaufruf) eine sehr häufige Ursache für diesen Fehler:


public void foo() {
    foo();
}

Um Probleme bei der Programmausführung zu vermeiden, warnen moderne IDEs häufig davor, Methoden rekursiv aufzurufen.

Sie können ein Programm, das Errors auslöst, nicht reparieren , aber Sie können Code schreiben, der keinen Fehler auslöst und Ihr Programm kaputt macht. Achten Sie darauf, was Sie mit dem Speicher machen, erstellen Sie sorgfältig Objekte und rufen Sie Methoden korrekt auf. Wenn Sie das tun, werden Sie weniger Probleme in Ihrem Code haben.

Unterschied zwischen den Fehler- und Ausnahmetypen

Fehler Ausnahme
Kann im Catch- Block nicht korrigiert werden Kann in einem Catch- Block gehandhabt werden
Tritt nicht zur Kompilierzeit auf Kann zur Kompilierungszeit abgefangen werden
Probleme in der JVM Probleme in der Codelogik
Alle Fehler sind deaktiviert aktiviert und deaktiviert

Ausnahmen können Sie in Java nicht umgehen, aber Sie sollten keine Angst vor ihnen haben. Sie müssen lediglich verstehen, was jeder Typ darstellt, und wissen, wie Sie damit umgehen. Das ist alles für heute! Mach's gut!