一、案例背景

本案例包含三个核心类:

  1. CD 类:模拟光盘,负责存储数据、设置数据大小、读写数据;
  2. Computer 类:模拟计算机,负责插入光盘、复制数据、修改数据、回写数据;
  3. User 类:程序入口,模拟用户操作,完成整个数据交互流程。

目标是:光盘数据 → 计算机复制 → 数据增值 → 回写到光盘,同时补全模板中的缺失代码,让程序完整运行。

二、完整代码实现

1. CD.java(光盘类)

public class CD {
    int size; // 光盘数据容量
    int content[]; // 存储光盘数据

    // 设置光盘容量,同时初始化数据数组
    public void setSize(int size) {
        this.size = size;
        content = new int[size];
    }

    // 获取光盘容量
    public int getSize() {
        return size;
    }

    // 获取光盘中的数据
    public int [] getContent() {
        return content;
    }

    // 向光盘写入数据(取两个数组的最小长度赋值)
    public void setContent(int [] b) {
        int min = Math.min(content.length, b.length);
        for(int i = 0; i < min; i++)
            content[i] = b[i];
    }
}

2. Computer.java(计算机类)

public class Computer {
    int data[]; // 计算机存储的数据
    CD includeCD; // 计算机中插入的光盘对象

    // 插入光盘:将光盘对象赋值给计算机的光盘属性
    public void putCD(CD cd) {
        includeCD = cd;
        int size = includeCD.getSize();
        data = new int[size]; // 根据光盘容量初始化计算机数据数组
    }

    // 将光盘数据复制到计算机
    void copyToComputer() {
        int [] b = includeCD.getContent();
        int min = Math.min(data.length, b.length);
        for(int i = 0; i < min; i++) {
            data[i] = b[i];
        }
    }

    // 给计算机中的每个数据增加指定数值
    public void addData(int m) {
        for(int i = 0; i < data.length; i++) {
            data[i] = data[i] + m;
        }
    }

    // 将计算机修改后的数据回写到光盘
    void copyToCD() {
        includeCD.setContent(data);
    }

    // 打印计算机中的数据
    void showData() {
        for(int i = 0; i < data.length; i++) {
            System.out.printf("%3d", data[i]);
        }
    }
}

3. User.java(用户测试类,补全模板代码)

public class User {
    public static void main(String args[]) {
        CD dataCD = new CD();
        int b[] = {1,2,3,4,5,6,7,8};
        dataCD.setSize(b.length);
        dataCD.setContent(b);
        int a[] = dataCD.getContent();
        System.out.println("dataCD 上的内容:");
        for(int i = 0; i < a.length; i++)
            System.out.printf("%3d", a[i]);

        Computer computerIMB = new Computer();
        // 【代码 1】将 dataCD 传入 putCD 方法,插入光盘
        computerIMB.putCD(dataCD);
        
        System.out.println("\n 将 dataCD 的数据复制到计算机:computerIMB.");
        // 【代码 2】调用方法复制数据到计算机
        computerIMB.copyToComputer();
        
        System.out.println("computerIMB 上的内容:");
        computerIMB.showData();

        int m = 12;
        System.out.println("\ncomputerIMB 将每个数据增加"+m);
        computerIMB.addData(m);

        System.out.println("computerIMB 将增值后的数据复制到 CD:dataCD");
        // 【代码 3】调用方法将数据回写到光盘
        computerIMB.copyToCD();
        
        System.out.println("\ndataCD 上的内容:");
        a = dataCD.getContent();
        for(int i = 0; i < a.length; i++)
            System.out.printf("%3d", a[i]);
    }
}

三、代码补全解析(核心模板代码)

  1. 代码 1computerIMB.putCD(dataCD); 作用:调用计算机的 putCD 方法,将 dataCD 这个光盘对象的引用传递给方法参数,完成「插入光盘」的操作。
  2. 代码 2computerIMB.copyToComputer(); 作用:调用方法,把插入的光盘中的数据,复制到计算机的内存中。
  3. 代码 3computerIMB.copyToCD(); 作用:调用方法,把计算机修改后的数据,回写到插入的光盘中。

四、核心知识点讲解

1. 类与对象的基本使用

  • CDComputer(模板),dataCDcomputerIMB对象(实例);
  • 通过 new 类名() 创建对象,比如 CD dataCD = new CD();,对象可以调用类中的方法和属性。

2. 对象引用传递(重点)

Java 中方法传递对象时,传递的是引用(内存地址),不是复制对象本身。 比如 computerIMB.putCD(dataCD); 中:

  • dataCD 是光盘对象的引用;
  • 传递给 putCD 方法后,Computer 中的 includeCDdataCD 指向同一个光盘对象
  • 后续修改光盘数据,双方都会同步变化,这是数据能回写成功的核心原因。

3. 方法的封装与调用

  • 每个类都封装了自己的功能:CD 管数据存储,Computer 管数据处理;
  • 对象之间通过调用方法协作:计算机插入光盘、复制数据、回写数据,都是方法调用实现的。

4. 数组数据传递

  • 数组和对象一样,传递的也是引用;
  • 案例中通过 getContent()setContent() 方法,完成数组数据的读写,保证数据安全。

五、程序运行结果

dataCD 上的内容:
  1  2  3  4  5  6  7  8
 将 dataCD 的数据复制到计算机:computerIMB.
computerIMB 上的内容:
  1  2  3  4  5  6  7  8
computerIMB 将每个数据增加12
computerIMB 将增值后的数据复制到 CD:dataCD
dataCD 上的内容:
 13 14 15 16 17 18 19 20

更多推荐