Предположим у нас есть код:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int A = Integer.parseInt(reader.readLine());
int B = Integer.parseInt(reader.readLine());
reader.close();
Получается так, что каждая из трех строчек снизу может вызвать IOException. Я должен завернуть их в один общий try catch или каждую в отдельности, как правильно? P.S. достаточно ли вызвать close только на reader? Типа у нас есть и BufferedReader и InputStreamReader
Для IOException используйте try-with-resources c одним catch:
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
int A = Integer.parseInt(reader.readLine());
int B = Integer.parseInt(reader.readLine());
} catch(IOException ioe) {
//что-то
}
close писать не нужно, т.к. в этой конструкции reader закрывается автоматически по завершении блока (вместе с InputStreamReader). Если по каким-то причинам нужно использовать обычный try, то reader.close нужно помещать в блок finally, с отделением инициализации reader и проверкой на null.
Не вижу смысла отдельно отлавливать IOException для каждой строки. Если сломается ввод/вывод, то это повлияет на исполнение всего блока.
Другое дело ошибки парсинга (NumberFormatException), которые может выбросить parseInt. Их обработка зависит от того как Вы хотите реагировать на неправильный ввод со стороны пользователя. Если в таком случае нужно вывести ошибку и выйти из программы, то достаточно одного catch. Если нужно перезапросить число, то понадобится и отдельный tryи отдельный цикл и, скорее всего, отдельный метод для ввода.
Продвижение своими сайтами как стратегия роста и независимости