区分 Scanner、System.in 和 Scanner class 在 java 中提供的 next() 方法的工作?

distinguish the working of Scanner, System.in, and next() methods that the Scanner class provides in java?

  Scanner scanner = new Scanner(System.in);

    System.out.println("enter number :");
    int number = scanner.nextInt();
    System.out.println("Number is " + number);

让我一步步解释我的理解,

Scanner scanner = new Scanner(System.in);  

这是我的模糊理解,我不确定我的知识。

我的问题是;

  1. Scannerclass是用来读取用户输入的,那么System.in也是用来读取输入的吗?不是吗?解释这两个术语之间的明确区别会有所帮助吗?

  2. 当我们从控制台键入(输入)输入时,它会去哪里? System.in?

是否 System.in 存储值?

  1. nextInt() 方法也用于读取输入?怎么运行的?它是否读取已经被 System.in 读取然后解析为 int 的输入?

扫描仪读取,System.in读取,nextInt()读取,全部读取?我分不清它们的工作原理?

System.in 中读取 ,它不会自己读取。

Scanner class 有助于解析从您提供的输入源获得的输入。 在这种情况下,您已经给它 System.in,所以它从那里读取输入。

nextInt()Scanner 提供的帮助您解析输入的方法之一。具体来说,它解析一个整数。

System.in 是一个 InputStream,它(默认情况下)从控制台提供用户输入。您可以使用 read:

直接读取它
int someByte = System.in.read();

请注意,这会读取一个无符号字节(Java 没有无符号字节的类型,因此类型为 int)。例如,如果我在我的控制台中输入 1,上面将把 49 存储到 someByte,因为 49 是 字符 1 的第一个字节] 编码为.

如果你想 someByte 改为 1,使用 System.in.read 显然不是很有帮助,是吗?我们不想只是读取字节。我们要读取字节,并使用特定的编码将这些字节转换为字符,然后 解析 将字符串转换为数字。这就是 Scanner 所做的。

A Scanner 可以获取输入流,并按需从中读取字节,使用默认编码将它们理解为字符,然后将字符块组合成 tokensScanner 读取内容的一种方法是调用 nextIntnextInt 所做的是:读取字节直到找到一个完整的标记,并将其解析为一个整数。

简而言之,System.in 为您提供原始字节,Scanner 为您提供已解析或其他方式的令牌。希望这能回答您的第一个和第三个问题。

when we type(enter) input from the console, where is it going? to the System.in?

是的,在这个抽象层次上,您可以说这是它首先要去的地方。然后将您输入的字节传递给 Scanner,然后将它们转换为标记,然后进行解析。