2014-10-18 3 views
0

У меня есть программа в java, в которой я должен получить пользовательский ввод, однако мне нужно только один раз ввести пользовательский ввод, после чего мне больше не нужен сканер. Выполнение следующих действий:Как использовать сканер только один раз, а затем избавиться от него?

int userInput = new Scanner(System.in).nextInt(); 

дает мне предупреждение ресурсов Leak, говоря, что <unassigned closeable value> is never closed.

Есть ли другой способ использовать сканер только один раз и избавиться от него, поэтому нет утечки ресурсов? Возможно, что-то похожее на заявление C# using.

ответ

6

Эквивалент C# using является try-with-resources. Не используйте это, он закроет System.in, и вы этого не хотите. Игнорируйте предупреждение для данного конкретного случая. Пусть сборщик мусора запросит Scanner и оставьте стандартный вход как есть.

0

Я могу видеть следующие два варианта ... Вариант №1: Явно закрыть сканер, как только вы прочитаете ввод один раз.

Scanner sc = new Scanner(System.in); 
int userInput = sc.nextInt(); 
sc.close(); 

Вариант № 2: С помощью примерки с-ресурс о

try(Scanner sc1 = new Scanner(System.in)) { 
    int userInput1 = sc1.nextInt(); 
} 

Минусом вариант # 2 является то, что он закроет все ресурсы, которые существуют в примерочных с-ресурса заявления, который включал System.in.

0

Java имеет автоматическую сборку мусора. Автоматическая сборка мусора - это процесс просмотра памяти кучи, определение того, какие объекты используются, а какие нет, и удаление неиспользуемых объектов. Объект, используемый для использования, или объект, на который ссылается, означает, что какая-то часть вашей программы все еще поддерживает указатель на этот объект. Неиспользованный объект или объект без ссылки больше не ссылаются ни на какую часть вашей программы. Таким образом, память, используемая неопубликованным объектом, может быть восстановлена.
Это означает, что вы не должны беспокоиться об этом типе предупреждений. Кроме того, в Eclipse вы можете использовать @SuppressWarning, чтобы избавиться от раздражающих предупреждений.