Checked vs ungeprüfte Ausnahmen in Java

Ich habe einige Probleme mit dem Verständnis der Unterschiede zwischenchecked undunchecked Ausnahmen in Java.

Zuerst,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 kannRunTimeExceptionselbst zu seinuncheckedUnterklasseException, 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);
    }
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage