在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()
- 调用
java.lang.System.in
(这是一个静态变量),in是一个java.io.InputStream
变量 - 调用行为类似于调用 PrintStream 类。
- 该过程像调用一样工作:
PrintStream.read()
- 但是我很难理解 read() 方法,它不是静态方法,因为它不应该直接调用。
它应该像这样调用:
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