A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 silencer 于 2015-4-9 13:59 编辑

import java.io.*;
class  ReadIn
{
        public static void main(String[] args) throws IOException
        {
                InputStream in = System.in;
                StringBuilder sb = new StringBuilder();

                while(true)
                {

                        int ch = in.read();
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {
                                String s = sb.toString();
                                if("over".equals(s))
                                        break;
                                System.out.println(s.toUpperCase());
                                sb.delete(0,sb.length());
                        }
                        else
                                sb.append((char)ch);

                }
        }
}

4 个回复

倒序浏览
本帖最后由 君嘘 于 2015-4-6 23:57 编辑

InputStream in = System.in;
这代码你懂什么意思嘛。。为何你会理解成in.read()是调用InputStream中的那个read()方法。

这句代码可以看出in是InputStream类型的变量吧。

这时候调用read是这样的:System.In.read()
而System.in中是怎么调用read()的我不清楚,想了解的话你要去查源码了。

不过可以肯定的是,in.read()调用的不是InputStream中的那个read(),而是某个继承了InputStream的子类中的的read()。
回复 使用道具 举报
君嘘 发表于 2015-4-6 23:55
InputStream in = System.in;
这代码你懂什么意思嘛。。为何你会理解成in.read()是调用InputStream中的那个 ...

System.in-------------应该肯定是一个对象(而且这个对象肯定是实现了InputStream抽象类的子类对象,这个子类的对象实现了抽象类中的抽象方法read(),所以才能调用,这里涉及多态)


不过,在查看System这个类的API中,看到是这样的
public final class System ------System 类包含一些有用的类字段和方法。它不能被实例化
      ---该final类中有三个成员变量,
                      ---public static final InputStream in
                      ---public static final PrintStream out
                      ----public static final PrintStream err
       这三个成员变量都是静态的,类名直接调用
       不过,用类名直接调用这三个静态变量,怎么会是一个对象呢??
求解释?
回复 使用道具 举报
看的有些书上说,System.in是一个BufferedInputStream类的对象,,
回复 使用道具 举报
这里涉及到了多态的知识,InputStream in = System.in;System.in是标准输入流,对应的是键盘,是InputStream的子类,这里是父类的引用指向了子类的对象。in.read()中的in指向的是System.in所以是可以调用该方法的
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马