一尘不染

Java中空引用上的静态字段

java

static Java中的成员(static字段或static方法)与它们各自的类相关联,而不是与此类的对象相关联。以下代码尝试访问null引用上的静态字段。

public class Main
{
    private static final int value = 10;

    public Main getNull()
    {
        return null;
    }

    public static void main(String[] args)
    {
        Main main=new Main();
        System.out.println("value = "+main.getNull().value);
    }
}

尽管main.getNull()返回null,但它可以工作并显示value = 10。此代码如何工作?


阅读 306

收藏
2020-03-21

共1个答案

一尘不染

该行为在Java语言规范中指定:

空引用可用于访问类(静态)变量而不会引起异常。

更详细地讲,进行静态场评估,例如Primary.staticField以下工作(重点是我的工作)-在您的情况下Primary = main.getNull()

  • 计算主表达式,并丢弃结果。[…]
  • 如果该字段是非空白的final字段,则结果是作为主表达式类型的类或接口中指定的类变量的值。[…]
2020-03-21