Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 若我们并没有为对象创建引用变量,那个么如何关闭scanner类,从而避免出现资源泄漏警告消息_Java_Java.util.scanner - Fatal编程技术网

Java 若我们并没有为对象创建引用变量,那个么如何关闭scanner类,从而避免出现资源泄漏警告消息

Java 若我们并没有为对象创建引用变量,那个么如何关闭scanner类,从而避免出现资源泄漏警告消息,java,java.util.scanner,Java,Java.util.scanner,如果我们没有为scanner类创建对象,如何关闭scanner类以避免出现警告消息,说明未分配的可关闭值、资源泄漏 因为我只需要从用户那里获取一次输入,所以我并没有为objectScanner类创建引用变量 我的声明以获取输入 int num = new Scanner(System.in).nextInt(); 我没有为Scanner类创建对象 是的,您做到了:新扫描仪(System.in) 在这种情况下,您可以使用try with资源: try(Scanner sc=new Scanner

如果我们没有为scanner类创建对象,如何关闭scanner类以避免出现警告消息,说明
未分配的可关闭值、资源泄漏

因为我只需要从用户那里获取一次输入,所以我并没有为object
Scanner类创建引用变量

我的声明以获取输入

int num = new Scanner(System.in).nextInt();
我没有为Scanner类创建对象

是的,您做到了:
新扫描仪(System.in)

在这种情况下,您可以使用try with资源:

try(Scanner sc=new Scanner(System.in)){
  int num = sc.nextInt();
  /* TO DO */
}
或者,只需使用.close()


或者您可以使用try/finally:

Scanner sc = null;
try
{
    sc = new Scanner(System.in);
    int num = sc.nextInt();
}
finally
{
    if(sc!=null)
    {
       sc.close();
    }
}

您的语法无法关闭
扫描仪
对象

我现在唯一能想到的方法是,如果
Scanner
不是一个
final
类,我们可以创建一个
,它扩展为
ScannerAutoClose
,并声明/覆盖它的
finalize
方法,并使用
this.close()
关闭其中的对象。
完成

方法将在垃圾收集时被调用,因此它将自动关闭。但是由于
扫描器
最终类
,因此这是不可能的。

您的语法不可能。从理论上讲,您必须对它进行引用,只要没有对该对象的活动引用,它就应该被销毁,因为Java中的垃圾收集是自动的。请注意,如果您是从system.in制作扫描仪,您可能不想关闭它。它实际上关闭了标准输入流,关闭后您将无法再读取输入。是的,我看到它会自动执行,而且如果我们没有使用任何变量或对象,它将删除并为其他对象提供空间。我只是试图节省内存,所以试图忽略创建引用变量。感谢您的时间,兄弟,我想并了解到scanner类必须有引用变量才能关闭。@RaviNarayanan,因为一般来说您希望关闭资源,但这是一个特殊的,具体情况下,您可能不会。是的,我对新关键字表示歉意。是的,我知道这一点,并且我曾经按照您的方式声明,但我尝试使用不同的方式,因为我只使用了一次,所以在try catch块内,我的声明也显示了相同的警告消息。只有这样,我们才需要在使用scanner时声明并关闭,所以我不能在java中以这种方式实现..对吗?嗨,Roman,这些我都知道,兄弟,所以这是我们需要声明和关闭的唯一方式..我的新声明在java中是不可能的,对吧。。。?
Scanner sc = null;
try
{
    sc = new Scanner(System.in);
    int num = sc.nextInt();
}
finally
{
    if(sc!=null)
    {
       sc.close();
    }
}