Warum erhalte ich den „unbehandelten Ausnahmetyp IOException“?
Lesezeit: 2 Minuten
Ich habe folgenden einfachen Code:
import java.io.*;
class IO {
public static void main(String[] args) {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
System.out.println(userInput);
}
}
}
Und ich bekomme folgende Fehlermeldung:
----------
1. ERROR in io.java (at line 10)
while ((userInput = stdIn.readLine()) != null) {
^^^^^^^^^^^^^^^^
Unhandled exception type IOException
----------
1 problem (1 error)roman@roman-laptop:~/work/java$ mcedit io.java
Hat jemand eine Idee warum? Ich habe nur versucht, den auf der Sum-Website angegebenen Code zu vereinfachen (Hier). Habe ich zu stark vereinfacht?
Markus
Sie sollten Ihrer Hauptmethode “throws IOException” hinzufügen:
public static void main(String[] args) throws IOException {
Sie können etwas mehr über geprüfte Ausnahmen (die für Java spezifisch sind) in lesen JLS.
Java hat eine Funktion namens “geprüfte Ausnahmen”. Das bedeutet, dass es bestimmte Arten von Ausnahmen gibt, nämlich solche, die Exception, aber nicht RuntimeException ableiten, so dass, wenn eine Methode sie werfen kann, es muss listet sie in seiner throws-Deklaration auf, sagen wir: void readData() throws IOException. IOException ist eine davon.
Wenn Sie also eine Methode aufrufen, die IOException in ihrer throws-Deklaration auflistet, müssen Sie sie entweder in Ihrer eigenen throws-Deklaration auflisten oder abfangen.
Der Grund für das Vorhandensein von geprüften Ausnahmen ist, dass Sie bei einigen Arten von Ausnahmen die Tatsache nicht ignorieren dürfen, dass sie auftreten können, da ihr Auftreten eine ganz normale Situation und kein Programmfehler ist. Der Compiler hilft Ihnen also, die Möglichkeit, dass eine solche Ausnahme ausgelöst wird, nicht zu vergessen, und fordert Sie auf, sie auf irgendeine Weise zu behandeln.
Allerdings passen nicht alle geprüften Ausnahmeklassen in der Java-Standardbibliothek unter diese Logik, aber das ist ein ganz anderes Thema.
Teil
Versuchen Sie es erneut mit diesem Code-Snippet:
import java.io.*;
class IO {
public static void main(String[] args) {
try {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
System.out.println(userInput);
}
} catch(IOException ie) {
ie.printStackTrace();
}
}
}
Verwenden try-catch-finally ist besser als benutzen throws. Das Auffinden von Fehlern und das Debuggen sind einfacher, wenn Sie es verwenden try-catch-finally.
vivz
Das Lesen von Eingaben von der Tastatur ist analog zum Herunterladen von Dateien aus dem Internet, das Java-IO-System öffnet Verbindungen mit der Quelle der zu lesenden Daten mit InputStream oder Reader, Sie müssen mit einer Situation umgehen, in der die Verbindung unterbrochen werden kann, indem Sie IOExceptions verwenden
Wenn Sie genau wissen möchten, was es bedeutet, mit InputStreams und BufferedReader zu arbeiten Dieses Video zeigt es
Fügen Sie Ihrer Methode “throws IOException” wie folgt hinzu: