当前位置: 首页 > 知识库问答 >
问题:

scanner.close做什么?

长孙知
2023-03-14

假设我有以下示例代码

Scanner scan1 = new Scanner(System.in);    // declaring new Scanner called scan1
int x = scan1.nextInt();    // scan for user input and set it to x
System.out.println(x);    // print the value of x
scan1.close();    // closes the scanner (I don't know exactly what this does)
Scanner scan2 = new Scanner(System.in); // declaring new Scanner called scan1
int y = scan2.nextInt();    // scan for user input and set it to y
System.out.println(y);    // print the value of y

我在扫描器类上阅读了Oracle文档,发现:

当扫描仪关闭时,如果输入源实现可关闭接口,它将关闭输入源。

这是否意味着一旦扫描仪(位于系统中)关闭,我将无法再使用系统。在整个Java程序中?或者这意味着我将无法在整个课堂上使用它?还是只有方法?还是仅限于其范围?

我的另一个问题是,扫描器是否仅限于其声明的范围(类似于原始数据类型)?


共有1个答案

公冶鸣
2023-03-14

是的,它确实意味着系统。将关闭中的。测试用例:

import java.util.*;

public class CloseScanner {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        scanner.close();
        System.in.read();
    }
}

此代码以

$ java CloseScanner 
Exception in thread "main" java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:206)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
    at CloseScanner.main(CloseScanner.java:7)

一旦关闭,您将无法使用系统。在中查看程序的其余部分。传递close()这一事实很好,因为这意味着您不必维护对输入流的单独引用,以便以后可以关闭它,例如:

scanner = new Scanner(foo.somethingThatMakesAnInputStream());

你可以这样做,然后打电话给。在扫描仪上关闭(),以关闭底层流。

在大多数情况下,您不希望关闭System.in,因此在这种情况下,您不希望调用

 类似资料:
  • 问题内容: 我正在阅读一本有关html开发的书(我还比较陌生),尽管该书一个月前(2011年11月)才刚刚出版,但作者是一位经验丰富的编码人员,也许可以用于行动形式是老派? 因为我试图获得示例代码的要点,但是尽管进行了搜索,却找不到解释。 在Google,SO和www.w3schools.com上。 有人知道该动作对表格意味着什么吗? 问题答案: 动作通常指定提交表单的文件/页面(使用方法参数中所

  • 在我的代码中,我打开了两个扫描器方法,但关闭一个扫描器将关闭所有扫描器` `这里是xd。关闭我的扫描仪也是为什么?它如何克服这一点?朋友们,我想知道为什么?。还有没有其他方法可以暂时关闭扫描仪以防止内存泄漏?

  • 问题内容: 为什么我们需要特定于数据库的功能,例如mysql_real_escape_string()?addlashes()不能做什么? 暂时忽略了参数化查询的高级替代方案,是一个仅使用addlashes()的web应用仍然容易受到SQL注入的攻击,如果是,怎么办? 问题答案: 当处理多字节编码的字符串时,加号通常不够好。

  • 问题内容: 我有以下代码: 据我了解,我创建了一个按钮,上面写着“清除”。然后,我必须将一个动作与此按钮关联(如果按下该按钮会发生什么),并由完成。这样对吗? 但是我不知道该在哪里指定动作。按下按钮应该清除文本区域,据我所知,应该在某处有代码清除文本区域。但是在给定的示例中, 。的参数中只有“ this” 。 程序如何知道按下按钮时应清除文本区域? 如果需要,请在此处给出完整的代码。 问题答案:

  • 问题内容: 显示在Netty 4升级文档中。您能解释一下它的作用吗? 谢谢! 问题答案: 这是一个通过套接字的选项,用于确定排队的连接数。 http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html 传入连接指示(连接请求)的最大队列长度设置为backlog参数。如果在队列已满时出现连接指示,则拒绝连接。 有关网络渠道的更

  • 问题内容: JavaDoc说: 我知道C#中有什么,但是这个标量和C#标量似乎绝对不同。 问题答案: 这是在声明您希望查询结果返回单个命名列的对象,而不是实体。例如 将返回一个。如果您指定多个标量,则结果将以的数组形式返回。与之类似,除了它适用于命名列,并且可以返回复合结果。