面向对象学习笔记6 - 对象数组

一、对象数组基础概念
当数组元素是引用数据类型中的类时,称为对象数组。例如Student[]数组,每个元素都是一个Student对象。
二、基础实现案例
1. 学生类定义
public class Student {
int number; // 学号
int state; // 年级(1-6)
int score; // 成绩(0-100)
}
2. 创建并初始化对象数组
public class StudentTest {
public static void main(String[] args) {
Student[] students = new Student[20];
for(int i=0; i students[i] = new Student(); students[i].number = i+1; students[i].state = (int)(Math.random()*6 + 1); students[i].score = (int)(Math.random()*101); } } } 3. 问题一实现:打印三年级学生 for(int i=0; i Student stu = students[i]; if(3 == stu.state){ System.out.println("number:" + stu.number + ",state:" + stu.state + ",score:" + stu.score); } } 4. 问题二实现:冒泡排序成绩 // 错误实现(仅交换分数) for(int i=0; i for(int j=0; j if(students[j].score > students[j+1].score){ int temp = students[j].score; students[j].score = students[j+1].score; students[j+1].score = temp; } } } // 正确实现(交换对象引用) for(int i=0; i for(int j=0; j if(students[j].score > students[j+1].score){ Student temp = students[j]; students[j] = students[j+1]; students[j+1] = temp; } } } 三、代码优化步骤 1. 添加对象信息显示方法 public class Student { // ...原有属性 public String show() { return "number:" + number + ",state:" + state + ",score:" + score; } } // 优化后的打印调用 System.out.println(stu.show()); 2. 创建工具类降低耦合度 public class StudentUtil { // 打印指定年级学生 public void printStudentsWithIndex(Student[] students, int state) { for(Student stu : students){ if(stu.state == state){ System.out.println(stu.show()); } } } // 遍历所有学生 public void printStudents(Student[] students) { for(Student stu : students){ System.out.println(stu.show()); } } } 3. 测试类优化调用 public static void main(String[] args) { // ...初始化代码 StudentUtil util = new StudentUtil(); System.out.println("---三年级学生---"); util.printStudentsWithIndex(students, 3); System.out.println("---排序后结果---"); util.printStudents(students); } 四、常见错误总结 对象未实例化:students[i] = new Student(); 必须创建对象实例 错误交换逻辑:排序时应交换对象引用而非单独交换分数 中英文字符混用:代码中的分号和逗号必须使用英文符号 方法声明错误:public static void main 正确的方法签名 五、关键知识点 • 对象数组的初始化需要双重操作:new Student[20] + 每个元素的new Student() • 冒泡排序时间复杂度为O(n²),适合小规模数据排序 • 工具类的封装降低了代码耦合度,符合单一职责原则