Часто встречаю подобный код:
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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей