Часто встречаю подобный код:
Scanner in = null;
try {
in = new Scanner(new File(FILE_NAME));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (in.hasNext()) {
В случае исключения вызовется e.printStackTrace();
, что выведет ошибку в stderr
, но ведь дальнейшее выполнение метода продолжится с некорректным состоянием?
Представленный в вопросе код плох в любом случае:
Если исходное исключение важно (например, этот метод в библиотеке и вызывается извне), то, вероятно, разработчики, использующие эту библиотеку, "отвесят низкий поклон" её создателям за невозможность обработать исключение так как им надо и за довольствование stacktrace-ом в stderr
Если исключение не важно (важен только результат), то тут всё равно вместо результата будет NullPointerException
, который ещё и непонятно на каком уровне будет обработан. Даже если вызывающая сторона обладает знанием (из документации или магическим образом) того что нужно отлавливать NullPointerException
и показывать при этом пользователю сообщение "Файл не найден", то при наличии в методе других потенциальных мест возникновения NullPointerException
, эта логика рискует оказаться сломанной
К каким выводам можно прийти:
catch
, например, return null
(или дальнейшую логику с in
обернуть в if (in != null)
, если возникшее исключение - ещё не повод прекращать работу метода), где-то - пробросить вверх и обработать, например, глобальноВсе правильно, если в блоке catch (Exception e) происходит обработка исключительной ситуации. Метод printStackTrace() выводит трассировку ошибки на экран. В данном блоке Вам необходимо либо аварийно завершить программу
System.exit(-1)
Или же предпринять действия, чтобы в дальнейшем программа корректно завершила работу.
Некорректного состояния не будет, так как ссылка будет указывать на null, следовательно if (in.hasNext())
выбросит вам исключение в рантайм NullPointerException
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый деньПодскажите, каким образом можно создать таблицу методом onClick? Например я создаю школьное расписание, и при первом входе в приложение...
Подскажите как получить все аппендеры из log4jproperty?
Не запускается python-скрипт, путь к файлу правильныйТа же самая команда запускается через терминал вручную