Почему я получаю "необработанное исключение типа IOException"?

у меня есть следующий простой код:

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);
       }
    }
}

и я получаю следующее сообщение об ошибке:

----------
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 

есть ли у кого-нибудь идеи, почему? Я просто попытался упростить код, указанный на веб-сайте сумму (здесь). Я слишком упрощаю?

5 ответов


вы должны добавить "throws IOException" в свой основной метод:

public static void main(String[] args) throws IOException {

вы можете прочитать немного больше о проверенных исключениях (которые специфичны для Java) в JLS.


Java имеет функцию под названием "проверенные исключения". Это означает, что существуют определенные виды исключений, а именно те, которые подкласс Exception но не RuntimeException, такие, что если метод может бросить их, это должны перечислите их в объявлении бросков, скажем: void readData () бросает IOException. IOException является одним из них.

таким образом, когда вы вызываете метод, который перечисляет IOException в его объявлении бросков, вы должны либо перечислить его в своих собственных бросках объявление или поймать его.

обоснование наличия проверенных исключений заключается в том, что для некоторых видов исключений вы не должны игнорировать тот факт, что они могут произойти, потому что их появление-довольно обычная ситуация, а не ошибка программы. Таким образом, компилятор помогает вам не забывать о возможности возникновения такого исключения и требует, чтобы вы каким-то образом его обрабатывали.

однако не все проверенные классы исключений в стандартной библиотеке Java подходят под это обоснование, но это совсем другая тема.


повторите попытку с этим фрагментом кода:

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();
        }   
    }
}

используя try-catch-finally лучше, чем при использовании throws. Поиск ошибок и отладка проще, когда вы используете try-catch-finally.


чтение ввода с клавиатуры аналогично загрузке файлов из интернета, система Java io открывает соединения с источником данных для чтения с помощью InputStream или Reader, вы должны справиться с ситуацией, когда соединение может разорвать с помощью IOExceptions

Если вы хотите точно знать, что значит работать с InputStreams и BufferedReader видео показывает


добавьте "throws IOException" в свой метод следующим образом:

public static void main(String args[]) throws  IOException{

        FileReader reader=new FileReader("db.properties");

        Properties p=new Properties();
        p.load(reader);


    }