System.out.println如何工作



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

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的值。

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

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 是包java.lang预定义的类,out作为静态引用变量PrintStream类对象,println方法被重载。

一旦 JVM 达到System.out.println行的控制System类被加载到运行时内存中,静态变量(即out引用PrintStream类对象被实例化,然后重载println方法被调用所有过程只发生一次,除了println方法被调用一次或 n 次。

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

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

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

下面的代码将简要介绍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...."); 
      }
}

最新更新