Почему я получаю “Тип необработанной исключительной ситуации 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 

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

33
задан Roman 21 February 2010 в 13:14
поделиться

3 ответа

Вы должны добавить "throws IOException" к вашему методу main:

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

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

53
ответ дан 27 November 2019 в 17:32
поделиться

Попробуйте повторить этот фрагмент кода:

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.

11
ответ дан 27 November 2019 в 17:32
поделиться

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

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

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

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

45
ответ дан 27 November 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: