2016-02-18 35 views
2

我试图创建一个扫描仪对象以在多个地方使用。创建只有一个扫描仪对象java

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

我以前使用的创造,实例变量的新关键字试过,但没有因为我的一些代码,具体的工作,但是这不是我的问题。我的问题很简单 - 这两个Scanner对象还是这个对象?

回答

1

每次运行doesSomething时,您将创建一个新的Scanner,如果有一个存储在keyboard中的旧存储(忘记垃圾收集),请继续。 main也将创建一个新的Scanner并将其放入keyboard

您将不会关闭原来的Scanner,这是一个资源泄漏(即它不好,因此您不想创建一个数量不足的零件并将其扔掉)。

1

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

所以从doesSomething方法去除keyboard = new Scanner(System.in);,因为你并不真的需要它,因为这方法已经获得keyboard场将在main方法进行初始化。

您也可以将keyboard从字段中更改为lat并将其作为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方法创建