1.这个in为什么可以被定义为抽像类inputstream定义,抽像类不是一定要被继承的子类才能用么;
2.既然in被定义成抽像类,那为什么还能继续调用.read()方法,我查了源文件根本就没有静态的read()方法,起码他得先建立个对像才能调用read吧
3.in在System中定义,一般情况下是返回null的,null的话不就等于空么,还怎么可以调用方法
4.谢谢邦助我的人,好人一生平安!

解决方案 »

  1.   

    1:
    "被定义为抽像类inputstream"你应该理解成 "in是一个InputStream",至于它到底是什么样的InputStream你不需要关心
    这就是所谓抽象2:
    System.in是在System类中定义的一个静态field,对in调用read()并非静态调用(System.in是一个实例,而非一个类名)
    其他疑问参考答案13:
    对于输入流的定义各个平台实现的方式肯定是不一致的
    System类还需要初始化
    这个是System类中的/**
         * Initialize the system class.  Called after thread initialization.
         */
        private static void initializeSystemClass() {
    4:
    记得结贴
      

  2.   

    ^_^多看看JAVA的基础类,主要关于输入输出的^_^
      

  3.   

    有的时候觉得上csdn真好,不知不觉就有信心了
      

  4.   

    第一、二个问题建议反复理解java的多态机制。第三个问题的神奇之处在这里:
        /* First thing---register the natives */
        private static native void registerNatives();
        static {
            registerNatives();
        }registerNatives()是一个native方法,而且它在类初始化的时候被调用。
      

  5.   

    至于registerNatives()到底做了些什么,那是jre的事情。有兴趣的话可以看看jre的源码(肯定不是java写的,而且不同操作系统是不同的,呵呵)。