在Java中,任何人都可以解释为什么这个对象是null?

时间:2012-07-23 22:52:38

标签: java exception null

class Monitor {
  TheManager manager;
  Map<String, Subject> subjectMap;
  public Monitor() {
    TheManager manager = new TheManager();
    Map<String, Subject> subjectMap = new HashMap<String, Subject>();
  }

  public void addObject(String objName, Object obj) {
    if(objName == null) System.out.println("name null");
    if(obj == null) System.out.println("obj null");
    if(manager == null) System.out.println("manager null");
    manager.addObject(objName, obj);
  }
}

我得到一个Null Pointer Exception,因为manager是null。我已经在代码中的其他地方实例化了Monitor的对象。当我尝试使用方法“addObject”时,它会在打印“manager null”之前给我NPE(因为它显然是)。

我觉得我在这里缺少一些非常基本的东西......任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:6)

您的构造函数包含

TheManager manager = new TheManager();

而不是

this.manager = new TheManager();

subjectMap的相同游戏。

答案 1 :(得分:2)

您永远不会分配经理,即对象的字段。 在构造函数中,您将分配一个局部变量。 变量会影响你的领域。

答案 2 :(得分:1)

您要定义managersubjectMap两次。一旦进入构造函数并进入类中。在构造函数中分配它们时,它们在构造函数的范围内,而不是类。您需要删除构造函数中的声明。

答案 3 :(得分:1)

我无法用Java解释它,但我可以用英语解释:P

请注意,您有一个实例变量

TheManager manager;

哪个没有设置。然后在构造函数中创建一个不同的变量:

TheManager manager = new TheManager();

在构造函数的末尾超出范围。要引用实例变量而不是新的本地变量,请从构造函数中的行的开头删除TheManager