黑马程序员技术交流社区

标题: 个人理解:java中的Scanner类需要手动关闭吗? [打印本页]

作者: 马明杨    时间: 2013-11-16 12:53
标题: 个人理解:java中的Scanner类需要手动关闭吗?
个人理解,不喜勿喷,多多指教:
Scanner是不需要调用close()方法的。

请看Scanner类的API:原文如下:

closepublic void close()关闭此扫描器。 如果此扫描器尚未关闭,并且其底层 readable 也实现 Closeable 接口,则该 readable 的 close 方法将被调用。如果此扫描器已经关闭,则调用此方法无效。
在扫描器关闭后执行搜索操作将导致 IllegalStateException。   

注意:如果此扫描器尚未关闭,并且其底层 readable 也实现 Closeable 接口,则该 readable 的 close 方法将被调用。这句话就表明,无需再调用close()方法,因为其底层 readable 也实现 Closeable 接口, Closeable接口内就有一个方法:close(),Scaner的底层实现了它,也就代表重写了close()方法,如果再人为的写入close(),那就是多次一举了,当然也不算错。


/*
请写一个功能,完成两个数求和。
数据从键盘录入。并测试。
*/
import java.util.Scanner;

class ScannerTest
{
        public static void main(String[] args)
        {
                //封装键盘录入
                Scanner sc = new Scanner(System.in);

                //获取两个数据
                System.out.println("请输入第一个数据:");
                int a = sc.nextInt();
                System.out.println("请输入第二个数据:");
                int b = sc.nextInt();

                int result = sum(a,b);
                System.out.println("求和结果是:"+result);
        }

        public static int sum(int a,int b)
        {
                return a + b;
        }
}

这个程序是可以正常执行的,也不存在什么资源浪费的问题。IDE工具也不会报告任何错误。谢谢,如果有什么地方不对,各位请指正。



作者: 赵晓海    时间: 2013-11-16 13:40
本帖最后由 赵晓海 于 2013-11-16 14:26 编辑

不会提示错误,是黄色叹号的提示。直接传图的话,图会被缩小,截图在附件里。
到底需不需要?我只是照提示添了一个。
求大神来解释

image.zip

52.83 KB, 下载次数: 172


作者: 小痞痞    时间: 2013-11-16 14:10
应该存在资源浪费的问题吧
虽然不用关流最后还是会被关闭
但是那是jvm帮你关的    jvm不可能在你刚用完就帮你关掉而是等他有时间了在帮你关掉
所以没有自己手动关掉的节约资源
IO中基本上所有的流都是实现了closeable接口
个人理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2