Java 对象未正确关闭。在扫描仪中它是什么意思?
我第一次用扫描仪。我得到一个错误@finish,说finish没有正确关闭。这是什么意思。谢谢Java 对象未正确关闭。在扫描仪中它是什么意思?,java,java-7,java-6,Java,Java 7,Java 6,我第一次用扫描仪。我得到一个错误@finish,说finish没有正确关闭。这是什么意思。谢谢 import java.util.Scanner; public class inputvalue { public static void main(String[] args) { int i = 0; Scanner finish = new Scanner(System.in); int j = finish.nextInt();
import java.util.Scanner;
public class inputvalue {
public static void main(String[] args) {
int i = 0;
Scanner finish = new Scanner(System.in);
int j = finish.nextInt();
while (i < j) {
System.out.print("hai");
i = i + 1;
}
}
}
import java.util.Scanner;
公共类输入值{
公共静态void main(字符串[]args){
int i=0;
扫描仪完成=新扫描仪(System.in);
int j=finish.nextInt();
而(i
扫描仪
实现具有关闭方法的可关闭
接口。实现此接口的所有类都表示它们正在使用需要关闭的资源。因此,您应该使用clsoe扫描仪
。执行此操作的一种方法是使用predestroy
方法,如下所示:
@PreDestroy
public void preDestroy {
scanner.close();
}
另一种方法是在代码末尾关闭扫描仪,如下所示:
public static void main(String[] args) {
int i = 0;
Scanner finish = new Scanner(System.in);
int j = finish.nextInt();
finish.close();
while (i < j) {
System.out.print("hai");
i = i + 1;
}
}
publicstaticvoidmain(字符串[]args){
int i=0;
扫描仪完成=新扫描仪(System.in);
int j=finish.nextInt();
finish.close();
而(i
阅读有关可关闭的和的更多信息编译器会警告您可能存在内存泄漏。遇到此问题时,有两种解决方案 后者 使用将自动关闭流的
try with resources
块。这将防止程序资源泄漏
int i = 0, j;
try(Scanner finish = new Scanner(System.in)){
j = finish.nextInt();
}
while (i < j) {
System.out.print("hai");
i = i + 1;
}
首先是糟糕的代码格式。而且<代码>finish.close()代码>我不认为您收到了错误,但您只是收到了警告?。当你不关闭一个资源流,比如一个
扫描器/输入流/等等。
你会得到一个资源泄漏添加完成.close()
为了避免资源泄漏实际上,正确的方法是使用try with resourcesys当然!我只是想展示用例一个完全由main()
组成的类很难成为@PreDestroy
方法的候选,除非scanner
毫无意义地成为类的静态成员,否则你的建议甚至不会编译。
int i = 0, j;
Scanner finish = new Scanner(System.in);
try {
j = finish.nextInt();
} finally {
if (finish != null) {
finish.close();
}
}
while (i < j) {
System.out.print("hai");
i = i + 1;
}