Checked vs ungeprüfte Ausnahmen in Java
Ich habe einige Probleme mit dem Verständnis der Unterschiede zwischenchecked
undunchecked
Ausnahmen in Java.
checked
Ausnahmen sollen während der Kompilierungszeit nach Unregelmäßigkeiten suchen. Beispiele aus verschiedenen Quellen zitieren die Datenbankkonnektivität und teilweise die Dateiverwaltungunchecked
Ausnahmen sollen nach Fehlern seitens des Programmierers suchen, z. B. Indizierung außerhalb des Bereichs eines Arrays usw.Sollte es nicht umgekehrt sein? Ich meine, die Datenbankverbindung wird zur Laufzeit hergestellt, oder? Gleiches gilt für die Dateiverwaltung. Sie öffnen kein Datei-Handle während der Kompilierungszeit. Warum wird also während der Kompilierungszeit nach einem möglichen Fehler gesucht? Auf der anderen Seite ist das Indizieren eines Arrays außerhalb seines Bereichs bereits im Programm vorhanden. Dies kann während der Kompilierungszeit überprüft werden Problem). Was vermisse ich hier?
2 Zweitens, wie kannRunTimeException
selbst zu seinunchecked
UnterklasseException
, welches istchecked
? Was bedeutet das?
In Herbert Schildts Buch habe ich ein Beispiel gefunden, das die Verwendung von erklärtchecked
Ausnahmen:
class ThrowsDemo {
public static char prompt(String str)
throws java.io.IOException {
System.out.print(str + ": ");
return (char) System.in.read();
}
public static void main(String args[]) {
char ch;
try {
ch = prompt("Enter a letter");
}
catch(java.io.IOException exc) {
System.out.println("I/O exception occurred.");
ch = 'X';
}
System.out.println("You pressed " + ch);
}
}
Ist derthrows
Klausel hier notwendig? Warum kann ich es nicht einfach normal mit einemtry-catch
Aussage wie diese (sorry, ich weiß nicht, wie man eine simuliertIO Exception
, konnte es also nicht selbst überprüfen!):
class ThrowsDemo {
public static char prompt(String str) {
System.out.print(str + ": ");
return (char) System.in.read();
}
public static void main(String args[]) {
char ch;
try {
ch = prompt("Enter a letter");
}
catch(java.io.IOException exc) {
System.out.println("I/O exception occurred.");
ch = 'X';
}
System.out.println("You pressed " + ch);
}
}