没有Nullpointer异常,即使对象也指向null

时间:2012-12-21 15:25:29

标签: java

  

可能重复:
  Static fields on a null reference in Java

我是Java新手。我知道是否有任何对象指向,如果我们尝试对该对象执行任何操作,JVM会抛出Nullpointer异常。但在我的情况下,没有Nullpointer例外请帮助我?以下是我的代码

public class Employee
{

     public static String empName = "John"

     public static void main(String args[])
     {
           Employee emp = new Employee();    
           emp = null;
           System.out.println(emp.empName);
      }   
}

它输出 John 作为输出,即使emp对象是指向null。但我期待一个nullpointer异常。

3 个答案:

答案 0 :(得分:5)

因为字段为static 在您的情况下,emp.empName等于Employee.empName

答案 1 :(得分:3)

由于您正在访问静态变量,因此如果引用引用null,则不会获得NPE。这是因为静态字段绑定到class而不是任何实例。

因此,对于静态变量: -

Employee emp = null;
emp.empName;  // This is evaluated as `Employee.empName;`

因此,仅使用引用类型。无论该引用是指向null还是指向任何子类对象。

答案 2 :(得分:0)

由于empName 静态字节代码中的调用将为Employee.empName,因此没有NPE:

原始代码: System.out.println(emp.empName);

字节代码: GETSTATIC java/lang/System.out : Ljava/io/PrintStream; GETSTATIC oops/Employee.empName : Ljava/lang/String;