java中输出常用System.out.println();其中out是System类中的一个static的属性(成员变量),而且是PrintStream类的一个对象。但我看源文件的时候,它是声明了一个out这样的对象,但实例化的时候好像只给了一个NULL?这样为什么还可以调用它的方法println()呢?println()不是static的呀。
它是怎样的一个过程呢?请高手赐教,谢谢!

解决方案 »

  1.   

    private static void initializeSystemClass() {
    ....
    setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
    ....
    }
      

  2.   

    楼主再仔细分析以下源码吧,代码里面并不是只给了out一个null值啊!
      

  3.   

    out
    public static final PrintStream out“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。 
    对于简单独立的 Java 应用程序,编写一行输出数据的典型方式是:      System.out.println(data)以上是帮助文档对System.out的说明,看了这你应该知道out已经被初始化了,不是null
      

  4.   

    可能你觉得在public static void main(String[] args){}里面不能调用非static方法,
    但System.out是一个PrintStream对象,通过对象是可以调用它本身的方法的,无论它的类型是什么.
      

  5.   

    不太懂,初学!
        
      private static PrintStream nullPrintStream() throws NullPointerException {
    if (currentTimeMillis() > 0) {
        return null;
    }
    throw new NullPointerException();
        }
    这不是总要抛出这个NullPointerException异常吗?有什么用?initializeSystemClass() //Initialize the system class.  Called after thread initialization
    这个初始化的东西就更不懂了,这么复杂!还得继续学习!!
      

  6.   

    可能你觉得在public static void main(String[] args){}里面不能调用非static方法,
    但System.out是一个PrintStream对象,通过对象是可以调用它本身的方法的,无论它的类型是什么.不是,我只是觉得out没有被实例化,不能调用它的方法。如果是static,没有被实例化也可以被类来调用。是我说错了,因为out就不是一个类,而是一个对象!,呵呵。看来实际中是被初始化了,只是我还没整明白!
    谢谢各位了!!!