Java在数组中存放多个对象实现方式
在前面的学习中数组存放的都是基本数据类型,但是这并不代表着数组只能存放基本数据类型,数组中也可以存放对象。
下面用案例来具体说下怎么通过数组存放多个对象。
一、题目
- 定义数组存储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、结果截图

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
浅谈Java中ThreadLocal内存泄露的原因及处理方式
内存泄漏就是我们申请了内存,但是该内存一直无法释放,就会导致内存溢出问题,本文详细的介绍了ThreadLocal内存泄露的原因及处理方式,感兴趣的可以了解一下2023-05-05
IntelliJ IDEA进行中文汉化的详细教程(附图文讲解)
今天为大家带来的是 IntelliJ IDEA 中文汉化教程以及中文插件包下载教程,经常收到小伙伴在后台给我留言,问 IDEA 怎么进行中文汉化,因为很多小伙伴是刚入门 Java,看到 IDEA 菜单全英文有些不太适应,需要的朋友可以参考下2024-12-12
idea中文件被Mark as Plain Text后恢复方式
在IntelliJ IDEA中,如果错误地将文件标记为纯文本(Mark as Plain Text),可以通过在项目目录中右键点击文件并选择“Mark as”来恢复原文件类型2024-11-11
基于Java实现ssh命令登录主机执行shell命令过程解析
这篇文章主要介绍了基于Java实现ssh命令登录主机执行shell命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-12-12
springboot加载复杂的yml文件获取不到值的解决方案
这篇文章主要介绍了springboot加载复杂的yml文件获取不到值的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03
SpringBoot使用Jasypt对配置文件和数据库密码加密
在做数据库敏感信息保护时,应加密存储,本文就来介绍一下SpringBoot使用Jasypt对配置文件和数据库密码加密,具有一定的参考价值,感兴趣的可以了解一下2024-02-02


最新评论