JAVA对象数组初始化之空指针异常

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值了,后面也就可以继续去使用了。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,对象数组初始化可能会出现多种错误。以下是一些常见的错误及其解决方法: 1. 空指针异常: 当你创建一个对象数组并尝试使用它时,如果数组中的元素未被初始化,你可能会遇到空指针异常。例如: ``` Person[] people = new Person[3]; System.out.println(people[0].getName()); ``` 这个代码将抛出空指针异常,因为people数组的第一个元素未被初始化。 解决方法:在使用数组元素之前,确保对它们进行初始化,例如: ``` Person[] people = new Person[3]; people[0] = new Person("Alice", 25); System.out.println(people[0].getName()); ``` 这个代码将正确地输出Alice。 2. 数组越界异常: 当你访问超出数组长度的元素时,你可能会遇到数组越界异常。例如: ``` Person[] people = new Person[3]; System.out.println(people[3].getName()); ``` 这个代码将抛出数组越界异常,因为people数组只有3个元素,而你尝试访问第4个元素。 解决方法:确保在访问数组元素之前,检查数组的长度或使用循环遍历数组。 3. 初始化错误: 当你使用对象数组时,如果在初始化数组元素时有错误,你可能会遇到各种错误。例如: ``` Person[] people = {new Person("Alice", 25), new Person("Bob")}; ``` 这个代码将抛出编译错误,因为第二个Person对象的年龄未被初始化。 解决方法:确保在初始化数组元素时,所有必要的参数都已经正确地赋值。 总之,在使用Java对象数组时,确保对数组元素进行正确的初始化和访问,以避免常见的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值