Pourquoi dois-je obtenir la “Unhandled exception de type IOException”?
J'ai le code simple suivant:
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);
}
}
}
Et j'obtiens le message d'erreur suivant:
----------
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
Quelqu'un a une idée pourquoi? J'ai juste essayé de simplifier le code donné sur la somme de site web (ici). Je n'ai simplifier à l'extrême?
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter "throws IOException" à votre méthode principale:
public static void main(String[] args) throws IOException {
Vous pouvez lire un peu plus sur checked exceptions (qui sont spécifiques à Java)JLS.
Java dispose d'une fonction appelée "checked exceptions". Cela signifie qu'il y a certains types d'exceptions, à savoir ceux qui sous-classe Exception, mais pas RuntimeException, de telle sorte que si une méthode peut les jeter, il doit liste de dans ses lancers déclaration, dire: void readData() throws IOException. IOException est l'un de ceux-ci.
Ainsi, lorsque vous appelez une méthode qui répertorie IOException dans ses lancers déclaration, vous devez l'indiquer dans votre propre jette de la déclaration ou de l'attraper.
La justification de la présence de checked exceptions, c'est que pour certains types d'exceptions, vous ne devez pas ignorer le fait qu'ils peuvent se produire, parce que leur arrive est tout à fait une situation régulière, pas une erreur de programme. Ainsi, le compilateur vous aide à ne pas oublier la possibilité d'une telle exception soulevée, et vous oblige à le traiter d'une certaine façon.
Cependant, pas tout vérifié classes d'exception en Java standard de la bibliothèque de l'ajustement en vertu de ce raisonnement, mais c'est un tout autre sujet.
Essayer de nouveau avec cet extrait de code:
À l'aide de
try-catch-finally
est mieux que d'utiliserthrows
. Trouver les erreurs et débogage plus facile lorsque vous utiliseztry-catch-finally
.Lecture de saisie au clavier est analogue pour le téléchargement de fichiers à partir d'internet, le système e /s de java ouvre des connexions à la source de données à lire à l'aide de InputStream ou d'un Lecteur, vous avez à gérer une situation où la connexion peut briser en utilisant IOExceptions
Si vous voulez savoir exactement ce que cela signifie de travailler avec InputStreams et BufferedReader cette vidéo montre
ajouter "throws IOException" à votre méthode comme ceci: