在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的本机调用),该方法根据输出流对象将打印流输出初始化到系统。谢谢你的回答。