Geprüfte Ausnahmen zwingen Benutzer, sie explizit zu behandeln. Sie werden für "behebbare" Ausnahmen verwendet, bei denen der Benutzer die Situation ordnungsgemäß behandeln kann.
Lassen Sie sich ein FileNotFound
nehmen - es in der Regel wird ausgelöst, wenn die Datei nicht vorhanden ist, und unten ist ein verwandtes Programmierung Idiom:
FileInputStream fis = null;
try {
fis = new FileInputStream(new File(""));
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Die hier geprüfte Ausnahme zwingt mich, es in einem try/catch-Block zu erklären, wo kann ich die fis
anmutig schließen, auch wenn es eine Ausnahme gibt.
Betrachten wir nun, dass FileNotFound
eine Laufzeitausnahme ist, wird der Code hypothetisch wie folgt aussehen:
FileInputStream fis = null;
fis = new FileInputStream(new File(""));
fis.close();
Nun, wenn diese eine Laufzeitausnahme wirft - die Sie nicht bei der Kompilierung behandeln müssen, Ihre fis
wird nicht anmutig geschlossen werden, und das ist ein Ressourcenleck.
'Arithmetische Ausnahme' ist nicht aktiviert? @Lathy –
Sie implizieren, dass es Ausnahmen gibt, die außerhalb der Laufzeit passieren können? – John