面向对象学习笔记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.length; 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<students.length; 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<students.length-1; i++){
    for(int j=0; j<students.length-1-i; 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<students.length-1; i++){
    for(int j=0; j<students.length-1-i; 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);
}

四、常见错误总结

  1. 对象未实例化students[i] = new Student(); 必须创建对象实例
  2. 错误交换逻辑:排序时应交换对象引用而非单独交换分数
  3. 中英文字符混用:代码中的分号和逗号必须使用英文符号
  4. 方法声明错误public static void main 正确的方法签名

五、关键知识点

• 对象数组的初始化需要双重操作:new Student[20] + 每个元素的new Student()
• 冒泡排序时间复杂度为O(n²),适合小规模数据排序
• 工具类的封装降低了代码耦合度,符合单一职责原则

posted @ 2025-03-06 13:35  谁来着?  阅读(59)  评论(0)    收藏  举报