在java中,java.lang.System
类,其中包含 静态变量。
声明为:公共静态最终InputStream
这意味着 in 是一个InputStream varibale。
但是我看到一些例子,使用
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()
java.lang.System.in
(这是一个静态变量),in是一个java.io.InputStream
变量PrintStream.read()
应该像:
PrintStream rd = new PrintStream(); int c = rd.read();
因为read()应该由实例调用。 read()声明:public abstract int read()抛出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
答案 0 :(得分:7)
如何做到这一点,InputStream中的read()方法不是静态方法,它怎么能直接调用呢?
您通过静态InputStream
变量在 in
的实例上调用它。所以这个:
int c = System.in.read();
相当于:
InputStream stream = System.in;
int c = stream.read();
这有助于使其更清晰吗?