Java 若我们并没有为对象创建引用变量,那个么如何关闭scanner类,从而避免出现资源泄漏警告消息
如果我们没有为scanner类创建对象,如何关闭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
未分配的可关闭值、资源泄漏
因为我只需要从用户那里获取一次输入,所以我并没有为objectScanner类创建引用变量
我的声明以获取输入
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();
}
}