Java 没有流时是否需要关闭扫描仪?
直接从此扫描仪:Java 没有流时是否需要关闭扫描仪?,java,java.util.scanner,Java,Java.util.scanner,直接从此扫描仪: 我不这么认为,但最好还是关闭它,以防您将代码更改为使用流。这也是一个好习惯,一个你真正想要养成的习惯 首先,我们养成习惯;那么,我们的习惯使我们变得更聪明 我会说关闭流,因为像关闭最后块中的资源这样的习惯根深蒂固是有意义的。如果我们不关闭字符串的扫描器,就不会有资源泄漏。内部new Scanner(String)创建一个StringReader作为底层源,当我们关闭Scanner时,它会关闭StringReader,但不会产生任何效果。如果您想将Scanner标记为关闭(以便对
我不这么认为,但最好还是关闭它,以防您将代码更改为使用流。这也是一个好习惯,一个你真正想要养成的习惯 首先,我们养成习惯;那么,我们的习惯使我们变得更聪明
我会说关闭流,因为像关闭
最后
块中的资源这样的习惯根深蒂固是有意义的。如果我们不关闭字符串的扫描器
,就不会有资源泄漏。内部new Scanner(String)
创建一个StringReader
作为底层源,当我们关闭Scanner
时,它会关闭StringReader
,但不会产生任何效果。如果您想将Scanner标记为关闭(以便对对象的所有后续操作都会立即失败),然后您必须调用Scanner.close()我认为使用Scanner.close()是个好主意;
我这样说是因为它可以防止资源泄漏,如果你养成了这样的习惯,那么它将对你非常有益。即使扫描器不是一个流,你也需要关闭它,以表明你已经完成了它的底层流。像Eclipse这样的IDE经常会发出警告,警告您“资源泄漏:'扫描仪'从未关闭”
注意:不要关闭连接到系统的扫描仪。在中!因为System.in对象是由JVM打开的,所以应该让JVM来关闭它。最好在使用完资源后立即关闭它们,否则编译器会抱怨内存泄漏并咕哝错误。
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();