gpt4 book ai didi

java - System.in 和 Scanner 对象

转载 作者:行者123 更新时间:2023-12-01 07:58:00 24 4
gpt4 key购买 nike

我无法理解 System.in 的作用。我所理解的只是它是 System 类中的一个数据字段,它的声明是:

public static final InputStream in

它已被声明为最终版本,因此无法更改。
正如 Oracle 源代码中提到的,他们说“in”是“标准”输入流。该流已打开并准备好提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的另一个输入源。
这到底是什么意思?

当我编写以下代码时:

Scanner input = new Scanner(System.in);

该 Scanner 对象已准备好扫描 System.in 中的内容,但 CMD 中没有显示任何内容。

另一点是,当我尝试打印System.in时,我最终得到如下输出:

java.io.BufferedInputStream@15db9742

谁能解释一下整个过程以及System.inScanner类的确切工作是什么!

最佳答案

System.inBufferedInputStream ,这样一个Stream可以是任何输入流(例如网络套接字或文件),也可以是标准输入 channel stdin .

stdin是你在命令行中输入的内容,所以显然,它没有显示任何内容。

当您创建Scanner时如您的问题所示,您将标准输入 channel 提供给 Scanner ,但扫描仪在收到要求之前不会执行任何操作。扫描仪是一个包装器:一种可以更轻松(更方便)地解析来自 stdin 的输入的构造。 。它不提供额外的功能,您可以自己完成扫描仪所做的所有事情,但如果您想解析例如 stdin 中的整数,那么使用扫描仪会更容易。 .

因此,当您键入:

Scanner sc = new Scanner(System.in);
int val = sc.nextInt();
System.out.println(2*val);

它将等待,直到您输入一行,将其解析为整数并在标准输出 channel 上打印输入值的 double 值 ( stdout )。

<小时/>

一些结论:

System.in is not final, you can use System.setIn to set another input stream as the standard input string. For instance a file or a network socket. The default System.in can also take input from for instance a file or a pipe if you for instance call the program as java -jar program.jar < inputfile.

关于java - System.in 和 Scanner 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com