1 什么是对象数组
在Java中,对象数组是指由对象类型的元素组成的数组。与基本类型数组不同,对象数组可以存储对象的引用。
对象数组的声明和初始化方式与基本类型数组类似。例如,可以使用以下语法声明和创建一个对象数组:
ClassName[] arrayName = new ClassName[arrayLength];
其中,ClassName 是指对象类型的类名,arrayName 是对象数组的名称,arrayLength 是数组的长度。
对象数组在Java中具有广泛的用途。它们允许存储和操作多个对象的引用,使代码更加灵活和可扩展。无论是存储对象集合、实现数据结构还是进行排序和搜索,对象数组都是一个重要的数据结构。
2 初始化对象数组
当我们创建一个对象数组时,数组中的每个元素会被初始化为对象的默认值。对象数组的默认值是 null,表示数组中的元素尚未被赋予有效的对象引用。
例如:
Student[] students = new Student [3] ;
其内存分配如下图所示:
从上图示可以看出,new Student[4]实际是分配了4个空间用于存放4个Student类型的引用,并赋初始值为null,而并非是分配了4个Student类型的对象。
对象数组的初始化可以通过两种方式进行:静态初始化和动态初始化。
3 静态初始化
静态初始化:在静态初始化中,我们可以直接为对象数组的每个元素赋值。在初始化时,可以提供具体的对象引用,将其分配给数组的每个位置。这种方式在声明数组时进行。
Student[] students = {new Student("Alice"), new Student("Bob"), new Student("Carol")};
在上述示例中,我们创建了一个 Student 类的对象数组 students,并使用静态初始化方式为每个元素赋值。
4 动态初始化
动态初始化:在动态初始化中,我们先创建一个指定长度的对象数组,然后逐个为每个元素分配对象的引用。这种方式需要使用 new 关键字来分配数组的内存空间,并使用构造函数为每个元素创建对象。
Student[] students = new Student[3];
students[0] = new Student("Alice");
students[1] = new Student("Bob");
students[2] = new Student("Carol");
在上述示例中,我们首先创建了一个长度为3的 Student 类的对象数组 students,并随后为每个元素分配了具体的对象引用。
无论是静态初始化还是动态初始化,对象数组中的每个元素在创建时都会被初始化为默认值 null。在初始化之后,我们可以通过赋值操作将具体的对象引用存储到数组的每个位置。
需要注意的是,当我们访问未初始化或为 null 的数组元素时,会抛出 NullPointerException 异常。因此,在使用对象数组之前,务必确保数组中的每个元素已经被正确地初始化。
5 使用对象数组管理一组学生
下面是一个示例,展示了如何使用对象数组来管理一组学生,每个学生具有姓名、年龄、性别和成绩属性。
public class ObjectArrayDemo {
public static void main(String[] args) {
// 创建学生对象数组
Student[] students = new Student[3];
students[0] = new Student("Alice", 18, 'F', 85.5);
students[1] = new Student("Bob", 20, 'M', 90.0);
students[2] = new Student("Carol", 19, 'F', 92.5);
// 遍历并打印学生信息
for (int i = 0; i < students.length; i++) {
Student student = students[i];
System.out.println("Name: " + student.name);
System.out.println("Age: " + student.age);
System.out.println("Gender: " + student.gender);
System.out.println("Score: " + student.score);
System.out.println();
}
}
}
class Student {
String name;
int age;
char gender;
double score;
public Student(String name, int age, char gender, double score) {
this.name = name;
this.age = age;
this.gender = gender;
this.score = score;
}
}
在上述示例中,我们定义了一个 Student 类,该类包含了学生的姓名、年龄、性别和成绩属性。我们使用构造函数来初始化学生对象的属性。
在 main 方法中,我们创建了一个长度为3的学生对象数组 students,并使用动态初始化为每个元素赋值。然后,使用 for循环遍历数组,并通过调用对象的访问方法打印每个学生的信息。