黑马程序员技术交流社区
标题:
Scanner
[打印本页]
作者:
yangyinhui
时间:
2013-4-3 18:11
标题:
Scanner
本帖最后由 yangyinhui 于 2013-4-4 15:05 编辑
public static void main(String[] args) {
System.out.println("请输入:");
Scanner scanner =new Scanner(System.in);
int x =scanner.nextInt();
System.out.println(x);
scanner.close();这段代码我知道是为了关闭Scanner,但是为什么要关呢?
作者:
赵亚威
时间:
2013-4-3 18:56
Scanner底层用的是IO流 这里你用了资源 最后你肯定要关掉呀 在说Scanner等于开辟了一个空间 你用完肯定要关掉 不然有引用 无法释放资源 如果你不停的这样 不关资源的话
你内存就会溢出 所以为了安全以及内存的使用 则使用的资源要释放掉
作者:
胡国彬
时间:
2013-4-3 22:57
这里的scanner其实底层是C或者C++申请的一块具体的内存,当你使用完毕之后,就要关闭,然后释放内存。
楼上说,如果不关闭会造成内存溢出,这个是不准确的,应该是造成内存泄漏。
其实java底层有GC去释放不用的内存,但是像流,以及数据库连接之类的,需要手动的去关闭,因为,GC是不会去主动关闭这些使用的连接的。
作者:
lucy198921
时间:
2013-4-4 10:17
凡是属于IO流的类如果不关闭会一直占用资源.要养成好习惯用完就关掉.就好像你接水完了要关水龙头一样.
很多下载软件或者视频软件如果你不彻底关,都会自己上传下载从而占用资源,你就会觉得卡,这一个道理.
作者:
随便
时间:
2013-4-4 10:49
Scanner的一个构造方法,因为是接受键盘输入,System.in,所以是这个方法。
public Scanner(InputStream source) {
this(new InputStreamReader(source), WHITESPACE_PATTERN);
}
复制代码
Scanner.close内部代码。
public void close() {
if (closed)
return;
if (source instanceof Closeable) {
try {
((Closeable)source).close();
} catch (IOException ioe) {
lastException = ioe;
}
}
sourceClosed = true;
source = null;
closed = true;
}
复制代码
输入流需要关闭资源这下就明白了吧。
还有就是熟悉了输入输出流。就可以使用
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
br.close();
作者:
奋斗2013
时间:
2013-4-4 12:19
上面的代码Scanner 类实例化的时候用了System.in流作为参数,Scanner 的close就是关闭流的。若不关闭会占用一定的内存资源。
scanner.close()为了释放占用的内存资源。
作者:
王川
时间:
2013-4-4 14:33
InputStream in = System.in;
Scanner scan = new Scanner(in);
System.out.println(scan.nextInt());
//scan.close();
Scanner scan2 = new Scanner(in);
System.out.println(scan2.nextInt());
复制代码
关闭扫描器是为了关闭底层的输入流对象。
当我们在程序中创建一个IO流对象的时候,同时系统也会创建
一个叫做流的东西,在这种情况下,计算机内存中实际产生了两个事物,一个是java程
序中类的实例对象,一个是系统本身产生的某种资源,而java垃圾回收器只能管理程序
中类的实例对象,没办法去管理系统产生的资源,所以程序需要调用close方法,去通
知系统释放其自身产生的资源。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2