关于java Scanner 对象closed()方法

最近的一次实验中,在主类函数调用一次其它类的函数时,发现输入Scanner函数出问题了,报错找不到,而当我把被调用函数的对Scanner对象in的方法,in.close();注释掉时,发现主函数恢复正常了,所以我想测试一下in.close();这行代码到底close了什么。

直接贴代码了

   public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        Scanner in1=new Scanner(System.in);
        System.out.println("in=in1 ? "+(in==in1));
        Scanner filein2=null;
        Scanner filein=null;
        try {
             filein =new Scanner(new File("test/graphpoet.txt"));
             filein2=new Scanner(new File("test/graphpoet.txt"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("in=fliein?"+(in==filein));
        System.out.println("filein=filein2"+(filein==filein2));
        System.out.println(in.nextLine());
        System.out.println(filein.nextLine());
        in1.close();
        System.out.println("close in1");
//        System.out.println(in.nextLine());
//        System.out.println(in.nextLine());
        System.out.println(filein.nextLine());
        filein2.close();
        System.out.println("filein2 closed");
        for(int i=0;i<3;i++)
        System.out.println(filein.nextLine());
    }

运行结果:

in=in1 ? false
in=fliein?false
filein=filein2false
123
123
GraphType = “GraphPoet”
close in1
GraphName = “LabNetwork”
filein2 closed

VertexType = “Word”
Vertex = <“Word12”, “Person”>

分析:

in=new Scanner(System.in);

in1=new Scanner(System.in);

filein=new Scanner(file1);

filein2=new Scanner(file1);


由运行结果可知:

1. in,in1,filein,filein2各自指向不同的对象

2. 当in1.close()后filein不受影响

3. 当in1.close(),再调用in.nextline()(把代码注释部分取消注释)会抛出异常,找不到该行,即in会受影响

4. 当filein2.close()后,filein不受影响;


结论:close(),方法并不是close了所有的Scanner 对象,而调用Scanner(System.in) 对象的close()方法后,再调用其它的Scanner(System.in)会抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值