【问题标题】:In java, How System.out.println method works in both static and non static context?在 java 中,System.out.println 方法如何在静态和非静态上下文中工作?
【发布时间】:2019-09-20 13:22:02
【问题描述】:

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

是否有任何 JVM 特定的实现可以解决这个问题?

【问题讨论】:

    标签: java static non-static system.out


    【解决方案1】:

    System.out 是一个静态字段/全局对象/单例。

    它随处可访问,无需非静态上下文。

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

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

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

    对于System.out,这些都不是“特殊”的,也不需要内部 JVM 魔法。

    【讨论】:

    • 实际上 System 类静态块使用 registerNatives() 进行初始化 .. 并且 VM 将调用 private initializeSystemClass() 调用私有本机方法 setOut0(..native calls to c) 初始化 PrintStream到系统依赖的输出流对象。感谢 4 Ur 的回答。
    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 2015-10-21
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多