class Point{
private double x;
private double y;
public Point(double x, double y) {
super();
this.x = x;
this.y = y;
}
public Point(){
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
}
这里我创建了一个坐标点的Point类
接下来我将使用这个Point类去说明我遇到的问题
我要创建Point的两个点进行求两个点之间的距离,一般我们都会这样去定义两个
对象:
Point p1 = new Point();
Point p2=new Point();
再利用我定义出来的p1,p2进行调用Set方法进行值的初始化,再进行计算。
但是这里我想到了C++中我们可以创建对象数组去存储这两个对象,这样通
过数组名加上对象在数组中的索引值不就可以直接调用了,没有必要为了区
别同一个类的不同的对象而命名很多次了。
这里我是这样做的:
package com.igeek.day12;
import java.util.Arrays;
public class Text6 {
public static void main(String[] args) {
Point[] p = new Point[2];
//System.out.println(Arrays.toString(p));
p[0].setX(2);
p[0].setY(2);
p[1].setX(3);
p[1].setY(3);
System.out.println(p[0].getX());
//System.out.println(Arrays.toString(p));
}
}
但是这样写,写的时候编辑器没有报任何错误,但是你在编译运行的时
候出现了空指针异常。
这个时候我就很差异了,我定义了无参数的构造函数,而且编辑的时候
也没有显示错误,为啥就会出现空指针异常。这样我就去找资料,发现java
中创建完对象数组之后你必须要对数组中的每一个对象进行实例化之后,才
可以去使用。
为啥要实例化的原因:
数组本身不是空,但是数组元素都是null,需要自己去手动初始化,它并
没有调用元素对象的构造方法,不能直接用。
也就是这样去初始化就可以了:
package com.igeek.day12;
import java.util.Arrays;
public class Text6 {
public static void main(String[] args) {
Point[] p = new Point[2];
//System.out.println(Arrays.toString(p));
for (int i = 0; i < p.length; i++) {
p[i] = new Point();
}
p[0].setX(2);
p[0].setY(2);
p[1].setX(3);
p[1].setY(3);
System.out.println(p[0].getX());
System.out.println(Arrays.toString(p));
}
}
实例化的实质就是让数组中的每一个对象调用一次构造函数,这样对象
数组中就不在是NULL值了,后面也就可以继续去使用了。
JAVA对象数组初始化之空指针异常
最新推荐文章于 2023-07-06 15:27:47 发布