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
方法中创建的扫描仪