Java在数组中存放多个对象实现方式

 更新时间:2026年03月17日 09:46:54   作者:糊涂涂是个小盆友  
文章介绍了如何通过数组存储多个对象,以计算三部手机的平均价格为例,展示了如何创建类、定义属性、编写方法以及如何进行数组扩容

在前面的学习中数组存放的都是基本数据类型,但是这并不代表着数组只能存放基本数据类型,数组中也可以存放对象

下面用案例来具体说下怎么通过数组存放多个对象。

一、题目

  • 定义数组存储3部手机对象
  • 手机的属性:品牌,价格,颜色。
  • 要求:计算出三部手机的平均价格

二、分析

①、抽取一个有关手机的类 test8_AP

②、写入属性,并通过带参的构造方法给属性赋值

③、在类中创建一个方法用来求三部手机价格的平均值 avg

④、avg方法中需要传入一个数组arr[],遍历该数组拿到数组对象中的价格price,然后对其求平均值并返回。

⑤、新建测试类test8,类中创建三个对象(带相应的参数)

⑥、创建一个存放对象的数组a[],类型跟对象的类型一致test8_AP

⑦、将新创建的三个对象放入数组a中。

⑧、通过创建的任一对象调用第③步编写的求手机平均值的方法,接收返回值,最后答应在终端

三、代码

3.1、test8_AP 代码

public class test8_AP {
    
//    todo  将对象装入数组中
    
    String brand;
    int price;

    public test8_AP(String brand, int price) {
        this.brand = brand;
        this.price = price;
    }

    //    todo 求三部手机价格的平均值
    public double avg(test8_AP arr[]){
        int sum = 0;
        double avg =0;
        
        for (int i=0;i<arr.length;i++){
            sum += arr[i].price;
        }
        avg = sum/arr.length;
        return avg;
    }
}

3.2、test8 代码

public class test8 {

    public static void main(String[] args) {
        test8_AP phone1 = new test8_AP("小米", 3000);
        test8_AP phone2 = new test8_AP("小米", 4000);
        test8_AP phone3 = new test8_AP("小米", 5000);

        test8_AP a[] = {phone1,phone2,phone3};

        double avg = phone1.avg(a);

        System.out.println(avg);

    }
}

四、补充知识:数组扩容

4.1、为什么要扩容

在编写代码初期定义了一个长度固定的静态数组(内部数据都已给定),但是题目要求能够再往数组中添加多个内容,这时就需要使用数组扩容,使用数组扩容后就能够正常往数组中添加新的内容了。

4.2、数组怎么扩容

①、定义一个新的数组newarr,长度是旧数组arr的2倍

②、通过for循环将arr中的每一项内容赋值给新的数组newarr

③、通过循环往新数组中添加元素,下标为newarr[arr.length+i],下标为旧数组+循环数 i 的原因:为了确保新加入的数据在之前数据的后边。通过下面的代码可以知道新加入的元素下标是从3+0 ---> 3+1 -----> 3+2 ----->3+3

4.3、扩容代码展示

public class ArrayExtend {
    public static void main(String[] args) {
        // todo 定义一个长度固定的数组
        int arr[] = {1,2,3};

        // todo 扩容:创建一个新的数组,长度是arr的2倍
        int newarr[] = new int[arr.length * 2];

        // todo 不能直接使用 newarr = arr 的原因:因为这样直接赋值是只能将arr的内存地址
        //  复制给newarr,达不到将其里面的内容赋值给newarr的效果
        // todo 将旧的数组给新的数组
        for (int i = 0; i < arr.length; i++) {
            newarr[i]=arr[i];
        }


        // todo 添加  批量添加
        for (int i = 0; i < arr.length; i++) {
            newarr[arr.length+i]=i;

        }
        for (int i = 0; i < newarr.length; i++) {
            System.out.println(newarr[i]);
        }
    }
}

4.4、结果截图

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mac安装配置jdk环境变量

    mac安装配置jdk环境变量

    这篇文章主要为大家介绍了mac安装配置jdk环境变量实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • spring task 定时任务实现示例

    spring task 定时任务实现示例

    本篇文章主要介绍了spring task 定时任务实现示例,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • 一文掌握Spring Cookie和Session 是什么及区别介绍

    一文掌握Spring Cookie和Session 是什么及区别介绍

    Cookie和Session都是用于在客户端和服务器之间传递信息的技术,但它们的工作方式和使用场景有所不同,Cookie是在客户端保存用户信息的一种机制,而Session是在服务器端保存用户信息的一种机制,本文介绍Spring Cookie和Session 是什么,感兴趣的朋友一起看看吧
    2025-01-01
  • 使用HttpClient调用接口的实例讲解

    使用HttpClient调用接口的实例讲解

    下面小编就为大家带来一篇使用HttpClient调用接口的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • SpringBoot使用TraceId实现日志链路追踪的步骤

    SpringBoot使用TraceId实现日志链路追踪的步骤

    本文介绍了如何实现服务调用的日志链路追踪,包括整合logback打印traceId、配置日志文件、通过MDC传递追踪ID,并重写线程池方法以保证异步和定时任务线程的traceId传递,实现高效日志查找和追踪,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • java实现远程桌面的实例代码

    java实现远程桌面的实例代码

    下面小编就为大家分享一篇java实现远程桌面的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • SpringBoot项目如何访问jsp页面的示例代码

    SpringBoot项目如何访问jsp页面的示例代码

    本篇文章主要介绍了SpringBoot项目如何访问jsp页面的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • idea导入项目爆红问题记录以及解决

    idea导入项目爆红问题记录以及解决

    这篇文章主要介绍了idea导入项目爆红问题记录以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java中的Comparable和Comparator接口

    Java中的Comparable和Comparator接口

    这篇文章主要介绍了Java中的Comparable和Comparator接口,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java实现Excel与TXT文本的高效互转

    Java实现Excel与TXT文本的高效互转

    在日常开发中,我们经常需要在不同的数据存储格式之间进行转换,本文将分享如何在 Java 中高效实现 Excel 与 TXT 的互转,有需要的小伙伴可以了解下
    2025-09-09

最新评论