У меня есть следующий простой код:
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
У кого-либо есть какие-либо идеи почему? Я просто попытался упростить код, данный на веб-сайте суммы (здесь). Я упрощал?
Вы должны добавить "throws IOException" к вашему методу main:
public static void main(String[] args) throws IOException {
Вы можете прочитать немного больше о проверяемых исключениях (которые специфичны для Java) в JLS.
Попробуйте повторить этот фрагмент кода:
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 есть функция, называемая "проверенные исключения". Это означает, что существуют определенные виды исключений, а именно те, которые подкласса Exception, но не RuntimeException, такие, что если метод может их выбросить, он должен перечислить их в своем объявлении throws, скажем: void readData() throws IOException. IOException является одним из таких.
Таким образом, когда вы вызываете метод, который перечисляет IOException в своем объявлении throws, вы должны либо перечислить его в своем собственном объявлении throws, либо поймать его.
Обоснование наличия проверяемых исключений заключается в том, что для некоторых видов исключений нельзя игнорировать тот факт, что они могут произойти, потому что их возникновение является вполне обычной ситуацией, а не ошибкой программы. Таким образом, компилятор помогает вам не забывать о возможности возникновения такого исключения и требует, чтобы вы каким-то образом его обработали.
Однако не все классы проверяемых исключений в стандартной библиотеке Java подходят под это обоснование, но это уже совсем другая тема.