青蛙如果 发表于 2017-5-17 22:18:09

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:11:00

本帖最后由 零度非安全 于 2017-5-17 23:18 编辑

因为你在 method1() 方法中关闭了流,然后在第 10 行这里尝试在流中读取据,所以会报错,因为流已经在

method1() 方法中被你关闭了

青蛙如果 发表于 2017-5-18 19:06:38

零度非安全 发表于 2017-5-17 23:11
因为你在 method1() 方法中关闭了流,然后在第 10 行这里尝试在流中读取据,所以会报错,因为流已经在

m ...

大概明白了,流已经被关闭了。
页: [1]
查看完整版本: Scanner的close方法到底做了什么?