为什么不调用从返回null的静态方法链接的静态变量抛出NPE?

Mah*_*rma 8 java null static

我有以下代码

public class Test {
    static String mountain = "Everest";

    static Test favorite() {
        System.out.print("Mount ");
        return null;
    }

    public static void main(String[] args) {
        System.out.println(favorite().mountain);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它会提高一个NPE但是它是在给出Mount Everest输出可以任何人澄清?

Sot*_*lis 4

碰巧您可以访问对象引用上的静态成员。在这种情况下,将根据引用的类型而不是其值来解析成员。

Java语言规范static成员的字段访问有这样的规定

如果该字段是非空最终字段,则结果是主表达式类型的类或接口中指定类变量的值。

如果字段不是final,或者是空白final,并且字段访问发生在构造函数中,则结果是一个变量,即类中指定的类变量,该变量是Primary表达式的类型。

所以Primary实例并不重要。