Когда я пишу это:
import java.util.*;
public class Test {
// static Scanner input = new Scanner(System.in);
static double y;
public static void main(String[] args) {
double x = someMethod(5);
}
private static double someMethod(int nr) {
Scanner input = new Scanner(System.in);
try {
y = input.nextDouble();
} catch (InputMismatchException e) {System.out.println("Type in a double");}
return y + nr;
}
}
Я получаю сообщение об ошибке "утечка ресурсов".
Но когда я пишу это:
import java.util.*;
public class Test {
static Scanner input = new Scanner(System.in);
static double y;
public static void main(String[] args) {
double x = someMethod(5);
}
private static double someMethod(int nr) {
try {
y = input.nextDouble();
} catch (InputMismatchException e) {System.out.println("Type in a double");}
return y + nr;
}
}
Это просто работает. Почему нет утечки ресурсов при определении входного сканера в поле данных класса?
В чем разница между объявлением переменной в поле данных и метода в методе?