Laufzeitausnahme in Java verstehen

Suraj P 12 Oktober 2023
  1. java.lang.RuntimeException in Java verstehen
  2. Unterschied zwischen java.lang.RuntimeException und java.lang.Exception
  3. Abschluss
Laufzeitausnahme in Java verstehen

In diesem Artikel erfahren wir etwas über java.lang.RuntimeException in Java.

java.lang.RuntimeException in Java verstehen

Java-Laufzeitausnahmen sind eine Art von Ausnahmen, die während der Ausführung eines Programms auftreten. Sie werden normalerweise durch Programmierfehler verursacht, z. B. durch den Versuch, durch Null zu dividieren oder auf einen Array-Index zuzugreifen, der außerhalb der Grenzen liegt.

Im Gegensatz zu geprüften Ausnahmen, die vom Entwickler behandelt werden sollen, gelten Laufzeitausnahmen als unvorhergesehen und müssen daher nicht explizit abgefangen oder in der Signatur einer Methode deklariert werden.

Eine der häufigsten Laufzeitausnahmen von Java ist die NullPointerException, die auftritt, wenn eine Anwendung versucht, eine Methode aufzurufen oder auf ein Feld auf einer Nullobjektreferenz zuzugreifen. Dies kann vorkommen, wenn ein Entwickler vergisst, ein Objekt zu initialisieren, oder wenn einem Objekt ein null-Wert zugewiesen wird.

Eine weitere häufige Laufzeitausnahme ist die ArrayIndexOutOfBoundsException, die auftritt, wenn eine Anwendung versucht, auf einen Array-Index außerhalb des gültigen Bereichs für dieses Array zuzugreifen. Dies kann auftreten, wenn ein Entwickler die Größe eines Arrays falsch berechnet oder wenn eine Schleife ein Array mit einem zu großen Index durchläuft.

Entwickler müssen die Ursachen dieser und anderer Laufzeitausnahmen verstehen, um zu verhindern, dass sie in ihrem Code auftreten. Dies kann durch sorgfältiges Testen und Debuggen sowie durch die Verwendung von Tools wie Codeanalysetools zur Identifizierung potenzieller Probleme erfolgen.

Im Allgemeinen sollten Laufzeitausnahmen als Zeichen eines Programmfehlers betrachtet und behoben werden, sobald sie entdeckt werden. Entwickler sollten immer bestrebt sein, robusten, zuverlässigen Code zu schreiben, der unerwartete Situationen problemlos bewältigen kann.

Beispiel

Sehen wir uns ein kleines Beispiel an, um es besser zu verstehen.

public class RuntimeExceptionExample {
  public static void main(String[] args) {
    // Example of a NullPointerException
    String str = null;
    System.out.println(str.length()); // this will throw a NullPointerException

    // Example of an ArrayIndexOutOfBoundsException
    int[] numbers = new int[5];
    System.out.println(numbers[5]); // this will throw an ArrayIndexOutOfBoundsException

    // Example of an ArithmeticException
    int x = 5;
    int y = 0;
    System.out.println(x / y); // this will throw an ArithmeticException
  }
}

Im obigen Beispiel wird eine NullPointerException ausgelöst, weil die Variable str null ist und die Methode length() darauf aufgerufen wird.

Im zweiten Beispiel wird eine ArrayIndexOutOfBoundsException geworfen, weil die Array-Nummern nur 5 Elemente haben und wir versuchen, auf das 6. Element zuzugreifen. Im dritten Beispiel wird eine ArithmeticException geworfen, weil wir versuchen, durch Null zu dividieren.

Es ist wichtig zu beachten, dass diese Beispiele in der Praxis richtig behandelt werden sollten und die Ausnahme nicht ausgelöst werden sollte. Zum Beispiel sollte im ersten Beispiel die Prüfung des null-Zeigers durchgeführt werden, bevor die Methode Länge aufgerufen wird.

public class RuntimeExceptionExample {
  public static void main(String[] args) {
    // Example of a NullPointerException
    String str = null;
    if (str != null)
      System.out.println(str.length());
    else
      System.out.println("String is null");

    // Example of an ArrayIndexOutOfBoundsException
    int[] numbers = new int[5];
    if (numbers.length > 5)
      System.out.println(numbers[5]);
    else
      System.out.println("Array index is out of bound");

    // Example of an ArithmeticException
    int x = 5;
    int y = 0;
    if (y != 0)
      System.out.println(x / y);
    else
      System.out.println("Cannot divide by zero");
  }
}

Es ist wichtig, diese Ausnahmen ordnungsgemäß zu behandeln, um einen Absturz der Anwendung zu verhindern.

Sehen wir uns nun den Unterschied zwischen java.lang.RuntimeException und java.lang.Exception an, ein gemeinsamer Ort, an dem viele Entwickler verwirrt sind.

Unterschied zwischen java.lang.RuntimeException und java.lang.Exception

In Java sind java.lang.RuntimeException und java.lang.Exception beides Arten von Ausnahmen, die während der Ausführung eines Programms ausgelöst werden können. Es gibt jedoch einige wesentliche Unterschiede zwischen den beiden.

  1. Geprüft vs. ungeprüft: java.lang.Exception ist eine geprüfte Ausnahme, was bedeutet, dass der Compiler vom Programmierer verlangt, sie zu behandeln oder sie in einer throws-Klausel zu deklarieren. Andererseits ist java.lang.RuntimeException eine ungeprüfte Ausnahme, was bedeutet, dass der Compiler den Programmierer nicht zur Behandlung auffordert.

  2. Arten von Fehlern: java.lang.Exception stellt typischerweise Fehler dar, die auf externe Faktoren zurückzuführen sind, wie z. B. Probleme mit Eingabe-/Ausgabeoperationen oder Probleme mit der Umgebung. Andererseits stellt java.lang.RuntimeException typischerweise Fehler dar, die aus Programmierfehlern resultieren, wie z. B. Nullzeiger-Ausnahmen oder illegale Argumente.

  3. Verwendung: java.lang.Exception wird im Allgemeinen für Ausnahmefälle verwendet, mit denen Sie rechnen und die irgendwie behandelt werden können. Wenn Sie beispielsweise eine Datei lesen, erwarten Sie, dass die Datei möglicherweise nicht existiert, und behandeln die FileNotFoundException entsprechend.

    Andererseits wird java.lang.RuntimeException im Allgemeinen für Programmierfehler verwendet, mit denen Sie nicht rechnen und die Sie nicht behandeln können. Eine Nullzeiger-Ausnahme ergibt sich beispielsweise aus einem Programmierfehler, sie sollte im normalen Betrieb nicht auftreten, und Sie können sie nicht behandeln.

  4. Vererbung: java.lang.RuntimeException ist eine Unterklasse von java.lang.Exception, daher sind alle Laufzeitausnahmen Ausnahmen. Aber nicht alle Ausnahmen sind Laufzeitausnahmen.

Zusammenfassend ist java.lang.RuntimeException eine Art von Ausnahme, die Programmierfehler darstellt und nicht vom Programmierer behandelt werden muss, während java.lang.Exception Ausnahmefälle darstellt, die der Programmierer behandeln kann.

Abschluss

Zusammenfassend ist java.lang.RuntimeException eine Art von Ausnahme, die Programmierfehler in Java darstellt. Diese Fehler werden in der Regel durch Nullzeigerausnahmen, ungültige Argumente oder Indexüberschreitungsfehler verursacht.

Im Gegensatz zu geprüften Ausnahmen, die der Programmierer benötigt, müssen Laufzeitausnahmen nicht behandelt werden, und das Programm wird beendet, wenn eine ausgelöst wird.

Es ist wichtig zu beachten, dass Laufzeitausnahmen nicht die einzige Art von Ausnahmen sind, die in einem Java-Programm ausgelöst werden können, und es ist wichtig, sowohl mit geprüften als auch mit ungeprüften Ausnahmen vertraut zu sein, um robusten und zuverlässigen Code zu schreiben.

Um diese Ausnahmen zu behandeln, empfiehlt es sich, den try-catch-Block zu verwenden, der es dem Programm ermöglicht, die Ausnahme abzufangen und zu behandeln, bevor es das Programm beendet.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - Java Exception