当前位置:   article > 正文

关于System.in和System.out_system.out为什么不需要入参

system.out为什么不需要入参

初次涉及IO是从键盘中输入,在控制面板上输出。

最简单的输入语法是:

Scanner input = new Scanner(System.in);

int x = input.nextInt();

最简单的输出语法是:

System.out.println();

在刚接触Java的时候根本不知道System.in是什么东西,也不明白为什么System.out.println()为什么会在控制面板上输出。

学完二进制输入输出后,一切开始明朗。

先说说System.in是什么。

查看API文档,在java.lang包中的方法System类中发现in是System中的由final修饰的InputStream类型的常量

in

public static final InputStream in
“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。

 

这说明System.in指的是一个输入流(InputStream),它的功能是创建一个由键盘输入的流

再说说System.in的工作原理。

众所周知,一个流必须要有一块地方提供该流的源头或者结尾,比如FileInputStream的构造方法:FileInputStream in = new FileInputStream(filesName)//filesName指的就是供该流读取字节的文件。大部分流都会有这样的一个文件。那System.in这个输入流的源头在哪里呢?System.in比较特殊,在使用这个流的时候,源头会更新,也就是说它的源头是新开辟出来的空间,用来储存键盘上输入的内容。

当我们调用System.in语句的时候实际上我们做了两个动作:1.创建了一个字节流;2.创建了一个类似于文件的储存空间(用完即被消除)。试分析下面语句:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

while((s=in.readLine)!=null){

        //循环主体

}

这种从键盘上向一个流中输入数据的方法称为阻塞式方法,当你不在键盘上输入数据或者没有按enter键输入的时候,循环是不会进行的,流会暂停流动。

最后说说System.out.println().

这里的System.out不用我说大家也应该猜到,它也是一个流,翻看API文档:

out

public static final PrintStream out
“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。

不过他是一个PrintStream类型的流,PrintStream类定义了println()方法,它的作用是想输出流的“尾巴”输出数据,而System.out的“尾巴”是可以设置的,设置语句为:System.setOut();//括号内是"尾巴",可以是一个文件,也可以是一个临时定义的容器类对象。

这两个东西其实不必深究,但是我总觉得有时间的话这些细节还是搞搞明白比较好,内心觉得踏实,我也是新手,希望各位大神不吝赐教,如果写得东西有误,希望各位大神不吝赐教。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/207216
推荐阅读
相关标签
  

闽ICP备14008679号