点类java空指针异常

时间:2017-05-04 19:22:47

标签: java pointers exception null

class Cell {
    Point ob ;
    int distance;
    public Cell(Point x, int i) {
       try {
            ob = x;// works fine
            distance = i;
        } catch (Exception e) {
          System.out.println(e.getStackTrace());

       }
    }

}

class Cell {
    Point ob ;
    int distance;
    public Cell(Point x, int i) {
        try {
            ob.x = x.x; // throws null pointer exception
            ob.y = x.y;
            distance = i;
        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }       

    }

}

错误:我在第二个代码中收到空指针异常。但是,当我尝试在构造函数中分配传递的对象时,它工作正常。

3 个答案:

答案 0 :(得分:1)

在您的第一个示例(有效)中,您将现有对象(由Point参数x传入)分配ob字段。

在您的第二个示例中,您尝试访问 ob的属性以便为其分配值,但ob永远不会被分配到任何地方 - 它是null,因此是例外。

答案 1 :(得分:1)

作为

ob.x = x.x;

表示获取x对象的ob变量,首先需要创建Point的实例并将其分配给ob。

ob = new Point();

将解决您的问题。

答案 2 :(得分:1)

在实例化之前,您可以在其上调用成员。

ob = x;// works fine

这里你只是分配变量,但你不要尝试使用它。

ob.x = x.x; // throws null pointer exception

在这里,您尝试设置ob成员的值,该成员是Point的实例。但是,您还没有实例化变量,这意味着它确实是null

因此,要么首先实例化它,要么尝试访问您作为参数传递的x实例的x变量。