鱼C论坛

 找回密码
 立即注册
查看: 4606|回复: 2

[已解决]Scanner的close方法到底做了什么?

[复制链接]
发表于 2017-5-17 22:18:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 青蛙如果 于 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() 方法中被你关闭了

0.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-17 23:11:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 零度非安全 于 2017-5-17 23:18 编辑

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

method1() 方法中被你关闭了

0.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

m ...

大概明白了,流已经被关闭了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 13:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表