面向对象学习笔记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);
}
四、常见错误总结
- 对象未实例化:
students[i] = new Student();必须创建对象实例 - 错误交换逻辑:排序时应交换对象引用而非单独交换分数
- 中英文字符混用:代码中的分号和逗号必须使用英文符号
- 方法声明错误:
public static void main正确的方法签名
五、关键知识点
• 对象数组的初始化需要双重操作:new Student[20] + 每个元素的new Student()
• 冒泡排序时间复杂度为O(n²),适合小规模数据排序
• 工具类的封装降低了代码耦合度,符合单一职责原则

浙公网安备 33010602011771号