Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,System.out.println方法如何在静态和非静态上下文中工作?_Java_Static_Non Static_System.out - Fatal编程技术网

在java中,System.out.println方法如何在静态和非静态上下文中工作?

在java中,System.out.println方法如何在静态和非静态上下文中工作?,java,static,non-static,system.out,Java,Static,Non Static,System.out,System.out.println方法如何在静态和非静态上下文中工作 是否有任何特定于JVM的实现是解决这个问题的答案?是一个静态字段/全局对象/单例 它在任何地方都可以访问,不需要非静态上下文 在该对象(一个PrintStream实例)上,您可以调用println方法 请注意,PrintStream#println不是静态方法。但是,您可以调用非静态方法,即使是从静态方法调用,只要您有一个实例可以调用它们(例如这里的System.out) 只有当您需要访问此(您自己类的当前实例)时,静态上下

System.out.println
方法如何在静态和非静态上下文中工作

是否有任何特定于JVM的实现是解决这个问题的答案?

是一个静态字段/全局对象/单例

它在任何地方都可以访问,不需要非静态上下文

在该对象(一个
PrintStream
实例)上,您可以调用
println
方法

请注意,
PrintStream#println
不是静态方法。但是,您可以调用非静态方法,即使是从静态方法调用,只要您有一个实例可以调用它们(例如这里的
System.out

只有当您需要访问
(您自己类的当前实例)时,静态上下文与非静态上下文才会有所不同。这里不需要这样做(除非您想执行
System.out.println(this)
——这在静态方法内部是行不通的)


所有这些都不是关于
系统的“特殊”。out
或需要内部JVM魔力。

实际上,系统类静态块使用registerNatives()进行初始化。。VM将调用private initializeSystemClass(),它调用私有本机方法setOut0(..对c的本机调用),该方法根据输出流对象将打印流输出初始化到系统。谢谢你的回答。