JAVA Scanner类如何在内部工作?

时间:2016-12-17 12:29:51

标签: java java.util.scanner inputstream system.in

在JAVA中导入Scanner类并创建Scanner对象时,底层逻辑如何捕获输入并将其写入内存?我理解以下陈述

Scanner sc = new Scanner (System.in) 

表示您正在创建一个名为Scanner的新sc类对象,该对象将继承以某种方式使用的Scanner类的属性和方法。但我想知道System.in论证的作用是什么?

当编译器完成类实例化步骤时,它将首先创建一个类构造函数,它将System.in作为参数接收,该参数是InputStream类的对象。这意味着当您调用Scanner类的nextInt()nextln()方法时,您实际上在做的是将该输入发送到该方法,该方法将对其执行一些语法检查,然后将其传递给InputStream类将其转换为字节,然后可以将其写入内存。

这是怎么回事?或者我完全脱离了轨道?

1 个答案:

答案 0 :(得分:0)

扫描仪类可用于读取不同来源的输入。 Scanner对象保存System类中存在的InputStream对象的地址。系统类的输入流对象从键盘读取数据,这是字节流/字节形式。 Scanner类将此读取字节转换为特定数据类型。 Scanner类是在Java5.0中引入的,直到那时BufferedReader是读取数据的首选模式,读取数据为字符串。 例如:

Scanner scan=new Scanner(System.in);

在这一行中,scan是Scanner类的一个对象,该对象保存Input Stream对象的地址。当从键盘读取一个字节的数据时,输入流对象,它保存键盘的地址(每个设备都被建立为OS中的字节/块特殊或字符特殊文件,因此设备的地址本质上是内存中块/字符特殊文件的起始地址)将该数据传输到Scanner类对象,可以操作该对象以将数据作为特定数据类型读取。