Scanner的close方法到底做了什么?
本帖最后由 青蛙如果 于 2017-5-17 22:20 编辑package labpackage;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(sc.nextInt());
method1();
int i = sc.nextInt();
System.out.println(i);
sc.close();
}
//一旦这里将sc关闭,方法执行完毕之后,会对主方法的sc产生影响
public static void method1(){
Scanner sc = new Scanner(System.in);
System.out.println(sc.nextInt());
sc.close();
}
}
如上代码,当执行完对method1的调用后,直接报错:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at labpackage.ScannerTest.main(ScannerTest.java:10)
只要把method方法中的sc.close();去掉就好了。这里就比较疑惑了,方法中的sc与主方法中的sc不是同一个对象啊,为什么会产生影响呢?sc.close()到底做了什么? 本帖最后由 零度非安全 于 2017-5-17 23:18 编辑
因为你在 method1() 方法中关闭了流,然后在第 10 行这里尝试在流中读取据,所以会报错,因为流已经在
method1() 方法中被你关闭了
零度非安全 发表于 2017-5-17 23:11
因为你在 method1() 方法中关闭了流,然后在第 10 行这里尝试在流中读取据,所以会报错,因为流已经在
m ...
大概明白了,流已经被关闭了。
页:
[1]