System.in()如何工作?

时间:2017-04-25 05:30:19

标签: java

我编写了一个接受char和字符串的代码:

    public static void main(String[] args) throws IOException {
    System.out.println("enter one char");
    char c = (char) System.in.read();
    System.out.println("The char entered is :" + c);
    String userInput;
    System.out.println("Enter a string");
    Scanner s = new Scanner(System.in);
    userInput = s.next();
    System.out.println("the string inputted is:" + userInput);}

输出:

enter one char
asdfg
The char entered is :a
Enter a string
the string inputted is:sdfg

任何人都可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:3)

Tim Biegeleisen所述,<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite"> <i class="fa orange" ng-class="{'fa-star': favorite || fav==myfav.id, 'fa-star-o': !favorite}"></i> 返回一个InputStream。扫描仪也可以在InputStream上运行。 InputStream的System.in()方法使用流中的第一个字节,您将其转换为char(这是有效的,因为它需要一个字节来存储char,因此您可以在不截断的类型之间进行转换)。 / p>

让我们分解。

read() https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#in

  

&#34;标准&#34;输入流。此流已打开并准备好提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源。

InputStream&#39; s System.in() https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#read--

  

从输入流中读取下一个数据字节。值字节作为int返回,范围为0到255 ...

扫描仪 https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html

  

扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。

扫描仪的read() https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#next--

  

查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入...

next()将读取/消耗静态InputStream的第一个字节。从同一个InputStream实例化System.in().read(),然后调用new Scanner会消耗剩余的令牌。

我建议您浏览一下您无法理解的任何类或方法的Java API文档。将事物分解为单独的类型并检查它们的构造函数和方法描述。

答案 1 :(得分:2)

System.in:一个InputStream,通常连接到控制台程序的键盘输入。它只不过是一个链接到System类的操作系统。使用System类,我们可以将从Keyboard到CPU的instream转移到我们的程序中。这就是用Java实现键盘读取的方式。

答案 2 :(得分:0)

System是java.lang包中的最后一个类。

read()方法 - &gt;从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。

System.in是一个InputStream,通常连接到控制台程序的键盘输入。由于数据通常通过命令行参数或配置文件传递给命令行Java应用程序,因此不经常使用System.in。