我正在尝试创建一个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对象还是这个对象?
答案 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
方法