Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 对象未正确关闭。在扫描仪中它是什么意思?_Java_Java 7_Java 6 - Fatal编程技术网

Java 对象未正确关闭。在扫描仪中它是什么意思?

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();

我第一次用扫描仪。我得到一个错误@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();
        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;
}