仅创建一个Scanner对象java

时间:2016-02-18 00:13:12

标签: java object

我正在尝试创建一个Scanner对象以在多个位置使用。

import java.util.Scanner;
private static Scanner keyboard;
public void doesSomething(String stringName){
    keyboard = new Scanner(System.in);
    ...
}

public static void main(String[] args){
    keyboard = new Scanner(System.in);
    ...
}

我之前尝试在创建该实例变量时使用new关键字,但由于我的代码的一些细节,这不起作用,但这不是我的问题。我的问题很简单 - 这两个Scanner对象还是这个对象?

2 个答案:

答案 0 :(得分:1)

每次运行doesSomething时,您都会创建一个新的Scanner,忘记存储在keyboard中的旧版本(如果有的话)(它会被垃圾收集),然后继续。 main还会创建一个新的Scanner并将其放入keyboard

你不会关闭旧的Scanner,这是一个资源泄漏(即它很糟糕,所以你不想创建一个无数Scanner并将它们扔掉不正确的。)

答案 1 :(得分:1)

每次调用new ...时,您都会创建单独的对象。因此,如果您调用main一次并让我们说它将调用doesSomething,您最终会得到两个Scanner对象。

所以从keyboard = new Scanner(System.in);方法移除doesSomething,因为您不需要它,因为此方法已经可以访问keyboard字段,该字段将在main中初始化方法

您还可以将keyboard更改为字段,并将其作为main方法中的局部变量。在此更改之后,让doesSomething方法接受Scanner作为参数

public void doesSomething(String stringName, Scanner keyboard){
    ...
}

public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    ...
    instance.doesSomething("something", sc);
    ...
}

并传递您在main方法

中创建的扫描程序