Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.in和扫描仪对象_Java_Input_System_Bufferedreader_Println - Fatal编程技术网

Java System.in和扫描仪对象

Java System.in和扫描仪对象,java,input,system,bufferedreader,println,Java,Input,System,Bufferedreader,Println,我在理解系统时遇到了一个问题。在具体的工作中,我所理解的是它是System类中的一个数据字段,它的声明是 public static final InputStream in 它已被宣布为最终版本,因此无法更改, 正如Oracle资料中提到的,他们说“in”是“标准”输入流。此流已经打开,可以提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源 这到底意味着什么 当我编写以下代码时: 扫描仪输入=新扫描仪(System.in) 扫描仪对象已准备好扫描System.in中的内容

我在理解系统时遇到了一个问题。在具体的工作中,我所理解的是它是System类中的一个数据字段,它的声明是

public static final InputStream in
它已被宣布为最终版本,因此无法更改, 正如Oracle资料中提到的,他们说“in”是“标准”输入流。此流已经打开,可以提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源

这到底意味着什么

当我编写以下代码时:

扫描仪输入=新扫描仪(System.in)

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

另一点是,当我尝试打印System.in时,我最终得到的输出是这样的

java.io。BufferedInputStream@15db9742


请任何人解释一下整个过程,以及System.in和Scanner类的确切工作是什么

系统。在
中是一个
缓冲输入流
,这样的
可以是任何输入流(例如网络套接字或文件),也可以是标准输入通道
stdin

stdin
是您在命令行中键入的内容,因此显然,它没有显示任何内容

如问题所示,当您创建一个
扫描仪
时,您会将标准输入通道馈送到该
扫描仪
,但扫描仪在被要求之前不会执行任何操作。扫描器是一种包装器:一种使解析来自
stdin
的输入更容易(更方便)的结构。它不提供额外的功能,您可以自己完成扫描仪的所有功能,但是如果您想解析
stdin
中的整数,使用扫描仪会更容易

因此,当您选择实例类型时:

Scanner sc = new Scanner(System.in);
int val = sc.nextInt();
System.out.println(2*val);
它将等待您输入一行,将其解析为整数,并在标准输出通道(
stdout
)上打印输入值的两倍


一些结论性说明:

System.in
不是
final
,您可以使用
System.setIn
将另一个输入流设置为标准输入字符串。例如,文件或网络套接字。 默认的
System.in
也可以从文件或管道中获取输入,例如,如果您将程序调用为
java-jar program.jar


系统。在
中是一个
缓冲输入流
,这样的
可以是任何输入流(例如网络套接字或文件),也可以是标准输入通道
stdin

stdin
是您在命令行中键入的内容,因此显然,它没有显示任何内容

如问题所示,当您创建一个
扫描仪
时,您会将标准输入通道馈送到该
扫描仪
,但扫描仪在被要求之前不会执行任何操作。扫描器是一种包装器:一种使解析来自
stdin
的输入更容易(更方便)的结构。它不提供额外的功能,您可以自己完成扫描仪的所有功能,但是如果您想解析
stdin
中的整数,使用扫描仪会更容易

因此,当您选择实例类型时:

Scanner sc = new Scanner(System.in);
int val = sc.nextInt();
System.out.println(2*val);
它将等待您输入一行,将其解析为整数,并在标准输出通道(
stdout
)上打印输入值的两倍


一些结论性说明:

System.in
不是
final
,您可以使用
System.setIn
将另一个输入流设置为标准输入字符串。例如,文件或网络套接字。 默认的
System.in
也可以从文件或管道中获取输入,例如,如果您将程序调用为
java-jar program.jar


Scanner
java.util
包中的一个类

当您写入
Scanner sc=new Scanner(System.in)
时,您正试图从
“标准”输入流中读取输入。主要是
系统。in
用于从控制台读取输入

扫描器保持程序执行直到输入到达,这就是它的本意

您的问题是,当您在
中打印
System.in时,最终会得到类似
java.io的输出。BufferedInputStream@15db9742
,此输出称为对象
哈希代码
,如果您尝试打印对象,则可能会得到此类输出。
这里您得到的是散列代码,因为您正试图打印整个流。

Scanner
java.util
包中的一个类

当您写入
Scanner sc=new Scanner(System.in)
时,您正试图从
“标准”输入流中读取输入。主要是
系统。in
用于从控制台读取输入

扫描器保持程序执行直到输入到达,这就是它的本意

您的问题是,当您在
中打印
System.in时,最终会得到类似
java.io的输出。BufferedInputStream@15db9742
,此输出称为对象
哈希代码
,如果您尝试打印对象,则可能会得到此类输出。
这里您得到的是哈希代码,因为您正试图打印整个流。

不完全正确。如果没有输入到达,并且您可以
Scanner.nextInt
,它将阻止程序执行,直到输入到达。不完全正确。如果没有输入到达,并且您可以
Scanner.nextInt
,它将阻止程序执行,直到输入到达。那么(stdin)是否与(System.in)相同,但发音不同?那么
System.in
(如果未设置为anthying else),Java是否等同于
stdin
,即