Java后端
·04-23 01:23Day 3
✅ 今天做了:继续复习
1.数组的定义
什么是数组:是存储 “同一类型数据” 的容器
数组四大核心特点:
储存的元素类型一致、初始化后数组固定不变、元素在内存中的储存是连续的且可以通过索引访问、数组属于引用数据类型
————————————————————————————
2.数组的基本使用:声明+初始化、数组的访问与遍历、数组的工具类
①声明+初始化:即先分配内存空间再赋值
数组声明:数据类型[ ] 数组名;
初始化:静态初始化,提前知道该数组所存储的所有元素,元素长度由元素个数决定:
数据类型[ ] 数组名 = new 数据类型[ ]{元素1, 元素2, ...};
动态初始化:不清楚具体元素,但规定了数组的长度:
数据类型[ ] 数组名 = new 数据类型[长度];
②数组的访问和遍历:
访问数组,通过数组索引访问,数组的索引从0 开始,最大索引是数组长度-1:数组名[索引];
数组的遍历,即对数组的所有元素逐一访问,普遍使用两种方式:
for循环(索引自增+1访问)→public class ArrayForLoop {
public static void main(String[] args) {
int[] scores = {90, 85, 95, 80, 100};
int sum = 0;
// 普通for循环:i是索引,从0到length-1
for (int i = 0; i < scores.length; i++) {
sum += scores[i]; // 累加每个元素
System.out.println("第" + (i+1) + "个学生成绩:" + scores[i]);
}
System.out.println("成绩总和:" + sum); // 输出450
}
}
for-each循环(只能获取元素,但不需要索引)→
for (数据类型 变量名 : 数组名) {
// 变量名代表当前遍历到的元素
}
数组的声明初始化和访问遍历需要注意几点:
索引越界,即使用超过数组长度-1的索引访问数组
空指针异常,数组变量未能指向有效数组
声明和初始化格式建议使用最规范的那种,简化写法容易混淆出错
数组一旦初始化就要确定长度,无论是静态还是动态初始化,初始化后无法进行动态增删
————————————————————————————————————————
3.数组的内存分析
以int[ ] scores = new int[ ]{90,85,95}为例
分位两部分来看,第一个部分是int[ ] scores ,其中int声明为数组储存的元素类型,这里指的是整型数组
scores指的是数组变量。数组变量存储着该数组的首地址,因为数组元素地址连续的特性,后续数组其他元素的访问都是用过首地址+索引来完成的。故解释了,为什么int[ ] scores数组不是基本数据类型而是引用数据类型,因为数组变量本身就是只存放了一个数组的内存首地址罢了。此时使用的是栈内存。
第二部分new int[ ]{90,85,95},实例化通知jvm分配三个连续的、能存放int数据的内存空间(堆内存),并且把90,85,95塞进对应的内存空间。
最后 = ,完成赋值,即数组变量获取到该数组首地址:scores → 0x123 → [90, 85, 95](地址0x123)
📚 今日感悟:数组定义、数组的基本使用、数组的内存分析
2
1
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
