1 java static-methods instance-variables system.in
在java,java.lang.Systemclass中,它有一个in静态变量.
声明为:public static final InputStream in
this
表示in是一个InputStream varibale.
但是我看到一些例子,
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()
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
但不知道为什么.
参考:http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
怎么能这样做,InputStream中的read()方法不是静态方法,它怎么能直接调用呢?
您通过静态变量在一个实例上调用它.所以这:InputStreamin
int c = System.in.read();
Run Code Online (Sandbox Code Playgroud)
相当于:
InputStream stream = System.in;
int c = stream.read();
Run Code Online (Sandbox Code Playgroud)
这有助于使其更清晰吗?