Java System.in和扫描仪对象
我在理解系统时遇到了一个问题。在具体的工作中,我所理解的是它是System类中的一个数据字段,它的声明是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中的内容
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
,即