我无法理解 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.in和Scanner类的确切工作是什么!
最佳答案
System.in
是 BufferedInputStream
,这样一个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 notfinal
, you can useSystem.setIn
to set another input stream as the standard input string. For instance a file or a network socket. The defaultSystem.in
can also take input from for instance a file or a pipe if you for instance call the program asjava -jar program.jar < inputfile
.
关于java - System.in 和 Scanner 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667599/