1.概述
关闭Scanner,即调用Scanner的close方法,一旦调用之后,后面即使重新new一个Scanner类,也无法再使用Scanner,如以下代码会报NoSuchElementException: No line found这个异常。
public class In {
public static void main(String[] args) throws InterruptedException {
Scanner scanner = new Scanner(System.in);
System.out.println(scanner); //刚开辟的Scanner的参数处于初始化
String str = scanner.nextLine();
System.out.println(str);
System.out.println(scanner);
scanner.close(); //用close方法关闭scanner调用的资源
System.out.println(scanner); //其属性source closed=true
System.out.println("**********************************");
Scanner scanner2= new Scanner(System.in); //重新声明但是无法调用
str= scanner2.nextLine();
System.out.println(str);
}
}
2.原因
原因是Scanner关闭之后,把自身调用的资源关闭了,其中System.in的资源也关闭了。因为in是System类的静态属性并且只可以实例化一次,而静态属性会让其变为共享。当关闭Scanner,即使再次声明Scaner也用不了,因为in被关闭了。
3.好处
如果一个方法中创建了Scanner对象,却没有关闭,那么在方法结束后,Scanner对象虽然会进入被回收的队列中,但不是立刻回收。因此会给计算机带来一定的负担。因此最后释放Scanner对象可以节省内存,避免影响计算机远行。