大家晚上好。我是一个使用Java编程的完全初学者,我正在学习“扫描仪”,但是当我在Eclipse中键入这个基本代码时,我收到一条消息说“资源泄漏:‘扫描仪’永远不会关闭。
我做错了什么?
package inputting;
import java.util.Scanner;
public class Input {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextLine());
}
}
这个问题已经问了几个月了,但我想补充一点:没有理由关闭系统。在
(关闭扫描仪即可)中,您可能不应该这样做。这是Eclipse发出的与可关闭和自动关闭相关的自动警告,如果底层资源是系统,则可以忽略。在
,系统中。退出
或系统。错误
。
对于任何其他资源,都显示了正确的习惯用法(以确保即使抛出异常,资源也会被关闭)。
Java 7之前的版本:
Scanner scanner = null;
try {
scanner = new Scanner(new FileInputStream("some/file"));
// statements that throw exceptions
} finally {
if(scanner != null)
scanner.close(); // also closes the FileInputStream
}
发布Java7:
try(Scanner scanner = new Scanner(new FileInputStream("some/file"))) {
// statements that throw exceptions
}
另请参见“为什么不在使用后关闭System.out
Stream?”系统也是如此。在
:您不应该关闭未打开的资源,当进程终止时,VM将处理该资源。
因为你根本没关扫描仪。这就是问题所在(处理I/O的类应该在完成后关闭)。您需要关闭它:
scanner.close();
因此,整个代码可以如下所示:
Scanner scanner = new Scanner(System.in);
try {
// work
}
finally {
if (scanner != null) {
scanner.close();
}
}
使用scanner
完成后,必须使用off
方法关闭:
scanner.close();
必须关闭它的原因是Scanner
类实现了可关闭接口。直接从API:
Closeable是可以关闭的数据源或目标。调用close方法来释放对象所持有的资源(例如打开的文件)。
基本上,如果您从未关闭扫描仪
,则程序将继续查找输入并保留资源。下面是一个非常简单的例子:
Scanner scanner = null;
try {
scanner = new Scanner(System.in);
while (scanner.hasNext()) {
System.out.println(scanner.next());
//do whatever you need here
}
} finally {
if (scanner != null) {
scanner.close();
}
}
从API中详细了解Scanner
。
Eclipse Java警告:资源泄漏:“Unassigned Closeable Value”从不关闭 漏在哪里?
我试图理解不对任何流调用close()会如何影响系统的性能和功能。为了做到这一点,我创建了下面的测试类。
我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用
大家好,我的程序员们。 我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。 有人能告诉我为什么这是不可能的吗: 但这是!? 第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象
为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?
我是个新手。我已经编写了这段代码,它显示那里存在资源泄漏 这是什么意思?抱歉,我太天真了。