Java 只创建一个扫描器对象
我正在尝试创建一个用于多个位置的扫描仪对象Java 只创建一个扫描器对象,java,object,Java,Object,我正在尝试创建一个用于多个位置的扫描仪对象 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
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关键字,但由于代码的某些细节,这不起作用,但这不是我的问题。我的问题很简单-这是两个扫描仪对象还是这一个对象?每次运行
doesmething
时,您都会创建一个新的扫描仪,如果存在键盘
中存储的旧扫描仪(它将很晚被垃圾收集),然后继续main
还将创建一个新的扫描仪
,并将其放入键盘
您不会关闭旧的扫描仪,这是一种资源泄漏(也就是说,它很糟糕,所以您不想创建大量的扫描仪并将其不当丢弃)。每次调用新…
时,您都在创建单独的对象。因此,如果您调用一次main
,并假设它将调用doesmething
,您将得到两个Scanner对象
因此,删除键盘=新扫描仪(System.in)代码>来自doesmething
方法,因为您实际上不需要它,因为此方法已经可以访问keyboard
字段,该字段将在main
方法中初始化
您还可以在main
方法中将keyboard
从字段更改为局部变量。更改之后,让doesmething
方法接受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
方法中创建的扫描仪