Objektorientierte Programmierung

Aus CCWiki
Zur Navigation springen Zur Suche springen

Exceptions

Exceptions oder Ausnahmen können von Methoden geworfen werden. Eine Exception tritt auf, wenn eine Methode außerhalb ihrer gewünschten Funktionalität operiert. Jede Exception ist ein java.lang.Throwable, d.h. entweder ist es die direkte Superklasse, oder irgendwo weiter oben. Weiters unterscheiden wir zwei Arten von Exceptions.

Checked Exceptions

Dazu gehört jede Exception die von java.lang.Throwable erbt, aber keine java.lang.RuntimeException und kein java.lang.Error ist. Wenn Checked Exceptions geworfen werden, so muss dies in der Methode mittels throws ExceptionName deklariert werden. Zusätzlich muss diese Art von Exeptions auch immer von der Aufrufenden Methode behandelt, oder weitergeworfen werden.

Unchecked Exceptions

Dazu gehören Alle Exceptions welche von java.lang.Error oder von java.lang.RuntimeException erben. Diese Exceptions müssen nicht in der Methoden Definition deklariert werden. Sie können abgefangen werden, normalerweise sollten diese aber überhaupt nicht auftreten.

Beispiele für RuntimeExceptions
Klasse Code
java.lang.IndexOutOfBoundsException
int[] arr = new int[]{1,2,3,4};
//Index existiert nicht
System.out.println(arr[5]);
java.lang.NullPointerException
Animal a = null;
//Die Referenz ist null, beim Zugriff crashts
System.out.println(a.toString());
Beispiele für Errors
Klasse Code
java.lang.OutOfMemoryError
//Tritt auf wenn keine weiteren neuen Objekte mehr erstellt werden können
List<int[]> list = new LinkedList<>();
while(true) {
  list.add(new int[10000]);
}

Beispiele

Im folgenden Beispiel wird eine Methode erstellt, welche einen Dateinamen nimmt und die Länge der Datei zurückgibt. Existiert die Datei nicht, so wird eine java.lang.FileNotFoundException geworfen:

public static long getFileLength(String fileName) throws FileNotFoundException {
  File f = new File(fileName);
  if(!f.exists()) {
    throw new FileNotFoundException();
  }
  return f.length();
}

Die Methode können wir folgendermaßen verwenden, bei dieser Variante fangen wir die Exception ab:

public static void main(String[] args) {
  try {
    long length = getFileLength("wichtig.txt");
    System.out.println("Die Datei ist: "+length+"Bytes lang");
  } catch(FileNotFoundException exc) {
    System.out.println("Die Datei wurde nicht gefunden!");
  }
}

Eine weitere Variante ist, dass die Aufrufende Methode, die Exception weiter wirft.

public static void main(String[] args) throws FileNotFoundException {
  long length = getFileLength("wichtig.txt");
  System.out.println("Die Datei ist: "+length+"Bytes lang");

Es kann auch zuerst die Exception gefangen, und dann weitergeworfen werden. Eine weitere Variante ist, dass die Aufrufende Methode, die Exception weiter wirft.

public static void main(String[] args) throws FileNotFoundException {
  try {
    long length = getFileLength("wichtig.txt");
    System.out.println("Die Datei ist: "+length+"Bytes lang");
  } catch(FileNotFoundException exc) {
    System.out.println("Die Datei wurde nicht gefunden!");
    throw exc;
  }