Scanner и System.in: нужно ли закрывать
Хочу раз и навсегда поставить жирную точку.
Нужно ли закрывать Scanner, связанный с System.in?
Ведь если его где-то в программе закрыть, то попытка воспользоваться System.in приведёт к исключению.
В книге Герберта Шилдта закрывается, так же как и у Барри Берда.
В книге Николая Прохоренка не закрывается (по крайней мере, я не заметил).
У Кея Хорстманна вроде бы вообще никакие Scanner напрямую не закрываются, но примерно с середины книги для System.in используется try с ресурсами, который в конечном итоге и закрывает System.in.
Некоторые считают, что System.in открывает не программист, поэтому и закрывать его нечего.
Видел мнение на англоязычном ресурсе, что закрывать System.in категорически нельзя.
А некоторые наоборот считают, что закрывать его необходимо, чтобы освободить ресурсы, но делать это нужно в конце программы.
Некоторые говорят, что закрывать System.in вообще не имеет смысла. А также если есть универсальный код, принимающий на вход InputStream, то System.in нужно заворачивать в декоратор для InputStream, который игнорирует вызов метода close().
Я вообще не понимаю, почему создатели Java не могли проработать такой элементарный вопрос как игнорирование потоком System.in метода close().