当前位置: 首页 > 知识库问答 >
问题:

当在类数据字段中声明扫描器变量时,什么没有资源泄漏?

潘高岑
2023-03-14

当我写这个的时候:

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

在方法中的数据字段vs上声明变量有什么区别?

共有1个答案

诸葛康胜
2023-03-14

当方法中有Scanner input=new Scanner(system.in);时,每次调用该方法时都要创建new Scanner实例,并且只使用一次。这会产生垃圾,因为现在您将有一个新的扫描器,每次使用该方法时都不再使用它。

如果在类中实例化扫描程序,只需创建一次并重用它,就可以防止程序出现垃圾。

 类似资料:
  • 大家好,我的程序员们。 我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。 有人能告诉我为什么这是不可能的吗: 但这是!? 第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象

  • 资源泄漏:“扫描”永远不会关闭。 因此,我在代码末尾添加了来处理警告。 出现这个问题是因为我在同一个包中有其他类也使用scanner对象,而Eclipse告诉我分别关闭这些类中的scanner。然而,当我这样做时,它似乎关闭了所有的扫描器对象,并在运行时得到错误。 我遇到的一篇文章提到,当关闭时,我不能重新打开。如果是这种情况,我是否只需要确保一个带有System.in的扫描器对象在程序末尾关闭,

  • 我正在读取一个文件并将其内容存储在字符串中。代码给了我一个警告:Resource leak:。我如何解决它?

  • 问题内容: 我是OOP范式的新手,所以可能对此问题有一个简单的解释… 您是否总是需要在类中声明公共对象范围的变量?例如: 在此代码中,即使是唯一声明的变量,也一样可访问和可用-似乎就像我将其声明为public一样。 如果未声明的类变量始终可以这样访问,那么将它们全部预先声明的意义何在? 问题答案: 该变量不是未初始化的,只是未声明的。 在类定义中声明变量是提高可读性的一种方式。另外,您可以设置可访

  • 嗨,伙计们,我想知道在声明变量时是如何工作的?您可以在下面代码的第3行中看到这一点。函数后的$output设置为函数,然后将$error变量设置为前一个命令的退出代码。在这种情况下怎么办/如何处理?

  • 问题内容: 以下方法不起作用,因为内部块声明的变量与外部块中的变量同名。显然,变量属于声明它们的方法或类,而不属于声明它们的块,因此,我无法编写一个简短的临时临时块进行调试,而恰好将外部作用域中的变量压入阴影只是片刻: 我使用过的几乎每种块范围语言都支持此功能,包括我在学校为解释器和编译器编写的琐碎小语言。Perl可以做到这一点,Scheme甚至C都可以做到。甚至PL / SQL也支持这一点! J