gpt4 book ai didi

java - 为什么 Java System.in.read() 可以调用 which 不是静态方法

转载 作者:行者123 更新时间:2023-11-29 06:37:32 24 4
gpt4 key购买 nike

在java中,java.lang.System类,它有一个in静态变量。
声明为:public static final InputStream in
这意味着 in 是一个 InputStream 变量。
但是我看到了一些例子,使用System.in.read() 读取输入。



怎么会这样,InputStream中的read()方法不是静态方法,怎么直接调用呢?据我了解,只有静态方法可以在不创建实例的情况下直接由类调用。


read() 声明:public abstract int read() throws IOException


谢谢 Jon Skeet 的回答,我还有点不明白。

如果我调用 System.in.read() 这意味着我调用了 InputStream 类方法 read()

java.lang.System.in -----> java.io.InputStream ----> read()
  1. 调用java.lang.System.in(这是一个静态变量),in是一个java.io.InputStream变量
  2. 调用类似于调用 PrintStream 类。
  3. 这个过程就像调用:PrintStream.read()
  4. 但是我很难理解 read() 方法,它不是静态方法,不应该直接调用它。
  5. 应该这样调用:

    PrintStream rd = new PrintStream();int c = rd.read();

as read() 应该由实例调用。read() 声明:public abstract int read() throws IOException

PS:我试过这段代码不行:

InputStream rd = new InputStream();
int c = rd.read();
System.out.println(c);

但不知道为什么。

引用:http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

最佳答案

How can it do that, the read() method in InputStream is not a static method, how can it be directlly call it?

InputStream 实例上通过静态in 变量调用它。所以这个:

int c = System.in.read();

相当于:

InputStream stream = System.in;
int c = stream.read();

这有助于使它更清晰吗?

关于java - 为什么 Java System.in.read() 可以调用 which 不是静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com