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....");
}
}