从null变量访问的静态变量

时间:2017-03-30 18:44:02

标签: java static access

当我尝试从未初始化的类实例打印静态字段值的值时,为什么不抛出空引用异常。

我期望在以下代码中出现Null引用异常:

public class Check {

  static int i=1;

  public static void main(String []args)
  {
     Check ch = null;
     System.out.print(ch.i);
  }

}

生成输出:1

3 个答案:

答案 0 :(得分:2)

在你的代码片段中,i是静态的,这意味着它可能不需要实例化,这意味着默认构造函数不需要被调用为:

Check ch= new Check();

因为istatic,只有参考就足够了。和你一样,

Check ch = null;

这样做,

System.out.println(ch.i); 

将打印静态上下文中的i值为1

答案 1 :(得分:1)

鉴于istatic(可以通过类直接访问,不需要使用实例),代码 ch.i ,编译器检查 ch Check)的引用类型,并使用它来访问变量i,而不是使用类实例。这意味着null(实例)根本不被使用(因此我们没有任何例外)。

就是这样,Check.i的输出是1

答案 2 :(得分:1)

因为i是一个静态变量,所以它的值是从对象还是从类中获取并不重要。

请参阅此处的说明:

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html