在PrintStream中有个write(int b)方法,其中有一行代码:out.write(b);,out应该是在构造器中初始化的,是OutputStream类型的,可是OutputStream类中的write(int b)方法确是abstract的,请问PrintStream中的write(int b)方法中的out.write(b)到底调用了哪个类的write(int b)方法?

解决方案 »

  1.   

    最简单的办法就是debug但你所说的很有可能是ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream 中的一种实现了该方法
      

  2.   

    怎么debug?
    实在理不出头绪了,请dx能详细说明一下。
      

  3.   


    "out应该是在构造器中初始化的"初始化的哪个类就是哪个类 也就是看out是哪个对象的引用
      

  4.   

    OutputStream是接口 是不能构造实例的 
    OutputStream out = new ***OutputStream();//后面这个就是你要找的类
      

  5.   

    可是System.out.println()怎么就能在控制台输出呢?
    除了FileOutputStream类的write(int b)方法是个native方法看不到代码,OutputStream的子类中的代码也没有往控制台输出的代码。
      

  6.   

    System.out是标准输出流从你所说的,应该知道是调用了FileOutputStream的write因为是native的,所以你不必关心如何实现了
    你要输出到控制台用System.out就行了
      

  7.   

    你的out 非 System.out.println()的out!!!
    你刚才要找的是哪个类的方法
    是的 各个类的方法实现的是不一样的 即便名字相同 你同意吧
    所以out这个流往哪写 是不是控制台 完全由函数内代码实现 
    你要深究的话可以去研究System.out.println()的源码也就是说你自己可以定义一个输出流 就用out引用吧 你也可以写成tuo 随便你写 好了 别人的out都往一个地方写 比如控制台 文件 你就是不一样 那你就用代码实现往10个地方写吧 这都随便你 明白?
      

  8.   

    davis129:
    我还真没明白呢!
     System.out.println()的out是PrintStream类型的
     println方法必然是PrintStream类的方法。
    一直看下去,发现private void write(String s)这个方法中有一行代码:textOut.write(s);
    textOut在PrintStream中是这么定义的:private BufferedWriter textOut;
    那么textOut.write(s);应该是调用了BufferedWriter的public void write(String str)方法
    然后沿着方法调用找下去,一直找到Writer类的abstract public void write(char cbuf[], int off, int len)方法。因为是个abstract方法,于是找不下去了。
      

  9.   

    流分为节点流 处理流(也可以分为字节流 字符流 这个不说)
    处理流是封装节点流初始化的 BufferedWriter是个处理流
    流不可能在一个无始无终的圈里流  流肯定是有始有终的
    比如: FileOutputStream out = new FileOutputStream(file);
    file是一个文件对象 也就是说 这个流写操作的时候将写入 这个对象->file 也就是一个文件
    这就是这个流的终点
    流也可以从其他方式获取 比如从一个远程连接对象conn上调用一个得到流的函数 
    函数return一个流 这个流 在连接对象conn初始化时 已经实例化了输入输出的对象 可以是一个File 也可以是一个控制台 道理跟上面new FileOutputStrean(file)一样
    输入流跟输出流道理是一样的 就是方式变下
    .......
    BufferedWriter的write(String str)方法 继承了Writer的public void write(String str) 这不是抽象函数 就是调用的这个