1

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


System.in.read()



怎么会这样,read()InputStream中的方法不是静态方法,怎么能直接调用呢?据我了解,只有静态方法才能由类直接调用而无需创建实例。


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();

因为 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

4

1 回答 1

7

怎么会这样,InputStream中的read()方法不是静态方法,怎么能直接调用呢?

您通过静态变量的实例上调用它。所以这:InputStreamin

int c = System.in.read();

相当于:

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

这有助于使其更清晰吗?

于 2013-08-18T07:01:40.807 回答