本文主要包含了数组的相关概念,以及数组的使用,如数组的访问、数组的遍历、数组与方法之间的关系以及引用数据类型的理解。
一、数组的相关概念
1.数组声明
元素数据类型[ ] 数组变量名; float[ ] floatArray
元素数据类型 数组变量名[ ]; int intArray[ ]
2.数组初始化
(1)静态初始化: int[ ] {1,2,3,4,5}
(2)动态初始化: 使用new运算符分配指定长度的内存空间
①数据类型[ ] 数组名称=new 数组类型[ ]{初始化数组}
②数据类型[ ] 数组名称=new 数组类型[ num ] num是指当前数组的最大元素
new 分配数组内存空间后,数组中的元素内容为默认值。
二、数组的使用
1、获取数组最大长度
数组名称.length
int [ ] arr=new int[5];
arr.length;
2、访问数组元素
使用数组名称[ 要访问元素相较于第一个元素的偏移量 ]
数组名称 [ 元素的索引 ]; 索引是指元素的下标
3、遍历数组
①普通for循环
public class Test7 {
public static void main(String[] args) {
int[]arr=new int[]{1,2,3,4,5,9,7};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
②增强for循环:只能读取数组的元素值。
public class Test7 {
public static void main(String[] args) {
int[]arr=new int[]{1,2,3,4,5,9,7};
for (int i :arr) {
System.out.print(i+" ");
}
}
}
4、数组与方法之间的关系
数组作为方法的参数
public static void printArr(int [ ] num){ }
5、关于引用数据类型的理解
实参到形参的传递仍然满足值传递。
把main中arr1数组的首地址拷贝一份给swapArr方法中的arr。具体分析需要引入栈区和堆区。
6、栈区和堆区
(1)栈区
先进后出,后进先出。方法的调用就是在栈区进行的,调用出栈时,临时变量会被销毁。方法中的局部变量和形参都在栈区存储。程序的调用过程对应栈中一个栈帧的入栈和出栈。
(2)堆区所有的对象都在堆区存储(数组对象,类的实例化对象,接口的对象)。
有new关键字,说明就在堆区开辟了新的内存空间。
main中的arr1的首地址为0x100,调用swapArr方法后,将main中arr1的首地址拷贝一份给swapArr中的arr,此时main中的arr1和swapArr中的arr指向的都是堆区的0x100,在swapArr中对堆区的数组值进行了交换。swapArr中数组值的改变对main方法是可见的。(本质是这两个引用指向了同一块内存区域)。所以对main中arr1数组的值也进行了改变。
但是,执行到第9行的时候,swapArr中在堆区开辟了一个新的内存区域,即swapArr中的arr已经不再指向main中arr1的首地址0x100了,而是开辟的新内存的首地址0x300。交换的也是新内存中的数值,对main中的不会产生影响。