Почему я получаю «нездоровое тип исключений IOException»?

StackOverflow https://stackoverflow.com/questions/2305966

Вопрос

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

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 

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

Это было полезно?

Решение

Вы должны добавить «бросает ioException» к своему основному методу:

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

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

Другие советы

У Java есть функция под названием «проверенные исключения». Это означает, что существуют определенные виды исключений, а именно те, которые подкласс исключение, но не 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

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

Добавьте «бросает ioException» в ваш метод, как это:

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

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

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


    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top