Doppelte Exception?

Hallo @all :smile:

Stellt euch bitte folgendes Szenario vor. In einem try-catch-Block wird eine Exception geworfen. Bevor Java die werfende Funktion verlässt, führt es noch die Anweisungen im finally-Block aus.

Was passiert eigentlich, wenn während der Bearbeitung der Anweisungen im finally-Block eine weitere Exceptions auftritt? Dann gibt es ja zwei ungeworfene Exceptions. Geht das überhaupt? Und welche Exception wird dann geworfen, die zuletzt aufgetretene (finally) oder die zuerst aufgetretene (try)…

Danke vorab für eure Hilfe und viele Grüße

Hasenfuß

Hi,

am besten probierst du es mal aus! Probieren geht über studieren.

Hier ein Codebeispiel zum testen >

package Tests;

import java.io.\*;

public class Main {

 public static void main(String[] args) {
 BufferedReader stdin = null;
 try {
 stdin = new BufferedReader(new InputStreamReader(new FileInputStream("nett.txt")));
 } catch (FileNotFoundException e) {

 e.printStackTrace();
 }
 finally{
 try {
 System.out.println(stdin.readLine());
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 finally{
 System.out.println("Text");
 }
 }


 }

}

Gruß

Hossa :smile:

Das war zwar nicht direkt eine passende Antwort auf meine Frage, aber ich habe deinen Beispiel-Code etwas modifiziert. Ich wollte ja wissen, was passiert, wenn in der JVM zwei Exceptions zum Werfen anstehen. Hier mein modifizierter Code:

import java.io.\*;

public class Main
{ public static void main(String[] args) throws Exception
 { BufferedReader stdin = null;
 try
 { stdin = new BufferedReader(
 new InputStreamReader(
 new FileInputStream("1.txt"))); } 
 catch (FileNotFoundException e)
 { e.printStackTrace();
 throw e; }
 finally
 { try
 { stdin = new BufferedReader(
 new InputStreamReader(
 new FileInputStream("2.txt"))); }
 catch (FileNotFoundException e)
 { e.printStackTrace();
 throw e; }
 finally
 { System.out.println("Ende"); } } } }

Hier gibt es zwei Exceptions, die von der Funktion „Main“ geworfen werden müssten. Als Antwort bekomme ich von der JVM:

java.io.FileNotFoundException: 1.txt
java.io.FileNotFoundException: 2.txt
Ende
Exception in thread "main" java.io.FileNotFoundException: 2.txt

Exception 1 wird gefangen und weiter geworfen.
Exception 2 wird gefangen und weiter geworfen.
Der finally-Block wird ausgeführt („Ende“)
Aber dann wird nur Exception 2 von „Main“ geworfen!

Mit anderen Worten: Wenn in einer Funktion mehrere Exceptions zum Werfen anstehen, wird immer die zuletzt aufgetretene nach oben geworfen, alle vorigen Exceptions gehen verloren!

Das wollte ich eigentlich nur wissen :smile:

Vielen Dank für deine Hilfe und viele Grüße

Hasenfuß

ich weiß nicht, ob ich das richtig verstanden hab, aber wenn in einem finally-block eine exception geworfen wird, dann wird das programm abgebrochen. die exception kann aber normal per try-catch aufgefangen werden. das einzige, was beachtet werden muss ist natürlich, dass die beiden exceptions unterschiedliche namen haben müssen.

Schon richtig , die 1 exception gilt .
Programm abbruch wegen exception 1 .
Aber da diese verarbeitet wird und danach eine 2
exception ausgelöst wird, steht nun Programm abbruch wegen exception 2 auf dem Programm . Solange also nichts neues Kommt gilt der letzte fehler, die anderen fehler wurden ja behandelt und schon überschrieben :smile:

Will man ein log haben, kann man sich ja eine logdatei schreiben und beim catch jeweils den fehler und ort angeben :smile: Oder ein besseren debugger haben :smile: