System是一个类,out是系统类中的静态引用变量,它将为printstrem类提供访问println方法的引用。如何创建printstrem对象并为out静态变量提供依据。
答案 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)
System
是java.lang
包中的预定义类out
,因为静态引用变量包含PrintStream
类对象,println
方法已超载。
一旦JVM命中控制到System.out.println
行System
类被加载到运行时内存中,静态变量即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....");
}
}