[java核心技术]-关于java的输入和输出,应该这样理解

问题前景

学java的都知道输出语句是

System.out.println("你好");

但是获取输入的值为什么这么麻烦呢
我们通常使用的方式如下

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();

如果你在给萌新讲课,那么你不仅要解释
public static void main(String[] args)这句废话
还要解释
Scanner scan = new Scanner(System.in);
着实有点心累。

而且就算入门了,也只是吧经历放到了其他核心api或者一些其他的技术,根本没有想过去了解下java的输入原理(反正我是这样)

然后我在教同学java的时候,我甚至直接从jshell开始,因为不想解释上面两句废话
先把基础语法学会,然后开始解释public是什么 static 是什么

言归正传,这里来看下系统的输入输出

控制台输出

要想知道为什么是System.out.println("你好");
就要先知道System.out是个什么东西
我们通过源码追踪找到
在这里插入图片描述
他这里是一个PrintStream类型一个静态变量,然后我们继续追踪,发现同样也是Output类型的。
在这里插入图片描述

使用PrintWriter

我们都学过java的io操作,我们可以尝试使用PrintWriter试一下

在这里插入图片描述发现结果都一样,唯一的不同就是我们使用完毕系统输出后
需要为了节省资源来关闭流
而我们使用System.out.println("你好");的时候并不需要关闭流

最后总结出:

系统的System.out.println();能帮我们更好的管理流,关闭流和释放资源都是系统来帮我们完成的

控制台输入

那么问题就来了,那为什么系统不把好事做到底,顺便把System.in也这样做
我们可以尝试一下,看看能直接读取到什么

使用字节流读取字节

下面我们写一个最原始的获取控制台输入的案例
在这里插入图片描述

使用BufferReader

然后我们可以使用BufferReader来给他升升级
在这里插入图片描述
结果还是写了一大老堆代码
而且,他读取的内容也十分有限制
在这里插入图片描述

了解Scanner

Scanner是什么,他真的只是一个从控制台输入的吗
他的构造方法有很多,但归根结底一句话,就是处理流中的字符串

Scanner里面有非常多的能帮助我们转换数据
在这里插入图片描述
所以,推荐使用Scanner的目的就是使用方便,我们能够按照我们的需求获取流中的数据(不仅仅是控制台)

我们可以使用Scanner来读取一个txt文件

如果我们知道下一行是一个数字还是字符串还是其他类型,我们就可以使用Scanner来读取

不过这个一般不会使用,这里只是举例说明

我们用的更多的是xml、json等比较成熟的文件,所以用不到Scanner

而最适合的当然就是我们用户手动输入的,所以,我们知道接下来系统要读取的数据,我们就按照需求在控制台输入,从而达到目的。

总结

Scanner:用来处理流中的文字,来获取我们想要的值
System.out:系统来帮我们管理、关闭和释放资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Timeless小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值