就是InputStream这个类是个抽象类,不能被实例化,也就是说抽象类是没有对象的是吧,可是,那为什么System.in是InputStream的对象呢,难道System.java中的这条语句:public final static InputStream in = nullInputStream();所定义的变量in不是对类InputStream的实例化吗?
谢谢!

解决方案 »

  1.   

    请注意in是static<静态的>可以直接调用!
      

  2.   

    什么调用?
    我问的不是调用的问题,我问的是InputStream是个抽象类,为什么在System.java里却可以用这条语句:public final static InputStream in = nullInputStream();创建一个InputStream 的对象in,难道这就不属于对抽象类InputStream的实例化了吗?谢谢!
      

  3.   

    public final static InputStream in = nullInputStream();
    那个nullInputStream()是什么?
      

  4.   

    查了一下源码:
    private static InputStream nullInputStream() throws NullPointerException {
    if (currentTimeMillis() > 0)
        return null;
    throw new NullPointerException();
        }
    这样我也不明白了,等待高手。
      

  5.   

    private static InputStream nullInputStream() throws NullPointerException {
    if (currentTimeMillis() > 0)
        return null;
    throw new NullPointerException();
        }
    返回NULL或抛出异常,不会返回InputStream类型
      

  6.   

    InputStream in = nullInputStream()InputSream = null;  所以没实例化阿
      

  7.   

    可是,那为什么System.in是InputStream的对象呢//////////////////////////////////////
    只是表明 System.in 这个属性是一个System.in类
    实际赋值的时候肯定是给一个InputStream具体子类的对象
      

  8.   

    一个父类的变量可以引用(指向)它的子类的对象。例如:A是B的父类,A本身是抽象的,但是它的一个子类B是具体的,可以实例化,那么可以:A a = new B(); a是A的变量,它指向(引用)了真正的对象是new B()生成的那个B的对象(实例),所以这里抽象类A仍然没有能够被实例化。那么我们怎么能够知道这个变量a真正引用的对象是哪个类的对象呢?可以这样:System.out.println("变量a引用的对象的类是:" + a.getClass().getName());
    这样就可以打印出来这个对象真正的类了。那么,楼主问的这个问题也可以这么来看看:
    System.out.println("变量System.in引用的对象的类是:" + System.in.getClass().getName());
    就可以得到答案了,^_^
      

  9.   

    那么这条语句中的System.in引用的是哪个类的对象呢:
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
      

  10.   

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    (这里是要用构造函数InputStreamReader(InputStream inputStream)来构造InputStreamReader的一个对象。)
      

  11.   

    执行一下这句话就知道了,^_^
    System.out.println("变量System.in引用的对象的类是:" + System.in.getClass().getName());
      

  12.   

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));---------这个System.in应该怎么理解呢?
      

  13.   

    我刚才执行了一下,是这个类:java.io.BufferedInputStream
      

  14.   

    哦,你的意思就是说,这里的System.in实际上是一个BufferedInputStream的对象?
      

  15.   

    System.in的实例是java.io.BufferedInputStream
    可以这样
    java.io.BufferedInputStream bi=(java.io.BufferedInputStream)System.in;
      

  16.   

    哦,你的意思就是说,这里的System.in实际上是一个BufferedInputStream的对象?
    ----------------------------我这句话说的有问题,应该说System.in是一个BufferedInputStream的对象的引用@_@.
      

  17.   

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    ----------------------
    在这个里面每new一次产生一个新的实例所以br是BufferedReader
    而system.in没有收影响任是BufferedInputStream
      

  18.   

    哦,你的意思就是说,这里的System.in实际上是一个BufferedInputStream的对象?
    -------------------------------------是的,你说的没错,^_^