在类数据字段中声明Scanner变量时,没有资源泄漏吗?

问题描述 投票:0回答:1

当我写的时候:

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;
    }
}

它确实起作用。在类数据字段上定义输入扫描程序时,为什么没有资源泄漏?

在数据字段上声明变量与在方法中声明变量之间有什么区别?

java java.util.scanner resource-leak
1个回答
0
投票

当方法中有Scanner input = new Scanner(System.in);时,您正在创建new Scanner实例每次,该方法被调用,并且仅使用一次。这会造成垃圾,因为现在您将拥有一个新的扫描仪,而每次使用该方法时,它都不再使用。

如果改为在类中实例化Scanner,则创建一次,然后重用,以防止程序产生垃圾。

© www.soinside.com 2019 - 2024. All rights reserved.