System.out.println如何工作?

时间:2013-12-26 08:58:46

标签: java

System是一个类,out是系统类中的静态引用变量,它将为printstrem类提供访问println方法的引用。如何创建printstrem对象并为out静态变量提供依据。

5 个答案:

答案 0 :(得分:3)

System.out有点特别。即使它是final字段,它也会被本机代码操纵 - 这就是System.setOut能够工作的方式。

初始化System类时,System.out在本机代码中初始化为对将写入控制台的相应流的引用。

在我正在查看的JDK 7代码中,有一个private static void initializeSystemClass方法,在正常的静态初始化程序之后由VM 执行。那包含:

FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));

...其中setOut0是一种原生方法,可以更改System.out的值。

答案 1 :(得分:2)

系统类具有私有构造函数,因此您无法实例化它。

private System() {
}

其次它作为类PrintStream的静态最终实例变量。

public final static PrintStream out = null;

现在,在这个PrintStream类中,您还有其他功能,如

public void println(String x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

这个对象的实例化在哪里?

这是本地电话。所以我们无法知道它的确切代码。

private static native void setOut0(PrintStream out);

但是如果你想改变默认的标准“输出流你可以调用

public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out);
}

再次在System类中。

答案 2 :(得分:0)

Systemjava.lang包中的预定义类out,因为静态引用变量包含PrintStream类对象,println方法已超载。

一旦JVM命中控制到System.out.printlnSystem类被加载到运行时内存中,静态变量即out引用PrintStream类对象被实例化然后重载{{1正在调用方法 这个过程只发生一次,除了println方法被调用一次或n次。

答案 3 :(得分:0)

•System是java.lang包中的一个类。

•out是System类的静态成员,是java.io.PrintStream的一个实例。

•println是java.io.PrintStream的一种方法。重载此方法以将消息打印到输出目标,输出目的地通常是控制台或文件。

答案 4 :(得分:0)

下面的代码将简要介绍System.out.println的工作原理:

class PrintStreamTest{  // PrintStream class

    public void printlnTest(String s) {  //Print() method
        System.out.println(s);
    }
}

public class SystemOutPrintExample { // System class
    public static final PrintStreamTest outTest=new PrintStreamTest(); // out variable


    public static void main(String[] args) {
        SystemOutPrintExample.outTest.printlnTest("hai brother...."); 
      }
}