Предположим у нас есть код:
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
и отдельный цикл и, скорее всего, отдельный метод для ввода.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Начал работать с Фреймворком Slim для написания сайта на пхпОднако, столкнулся с проблемой при пройстейшем рутинге
Есть строка https://sitecom/ru/moskov/medceter&page=2 Еще бывает https://site
При смене пароля на почту админа приходит уведомление о смене пароляПодскажите, как сделать чтобы эти уведомления админу приходили на другую...