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());
}
}
}
错误:我在第二个代码中收到空指针异常。但是,当我尝试在构造函数中分配传递的对象时,它工作正常。
答案 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
变量。