Heute bei der Arbeit musste ich ein Code-Snippet überprüfen, das diesem Mock-Beispiel ähnelt.Verhalten von verschachtelten schließlich in Ausnahmen
package test;
import java.io.IOException;
import org.apache.log4j.Logger;
public class ExceptionTester {
public static Logger logger = Logger.getLogger(ExceptionTester.class);
public void test() throws IOException {
new IOException();
}
public static void main(String[] args) {
ExceptionTester comparator = new ExceptionTester();
try {
try {
comparator.test();
} finally {
System.out.println("Finally 1");
}
} catch(IOException ex) {
logger.error("Exception happened" ex);
// also close opened resources
}
System.out.println("Exiting out of the program");
}
}
Es ist die folgende output.I Druck zu erwarten, da die inneren try
einen Compiler-Fehler keinen catch
Block hat.
Finally 1 Exiting out of the program
Ich verstehe nicht, warum IOException
durch die äußere catch
Block abgefangen wird. Ich würde es begrüßen, wenn jemand das erklären kann, vor allem mit dem Hinweis auf Stapel Abwickelprozesses
Ein 'try' muss> = 1' catch' __und/oder__ ein 'finally' haben. Der 'catch' ist nicht erforderlich. – dkarp