数组的概述
数组:数组是多个相同类型数据按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
数组属于引用数据类型的变量。
数组元素可以是基本数据类型,也可以是引用数据类型。
数组在内存中是一组连续的内存单元,数组的长度一旦确定,就不能修改。
一维数组的初始化
- 一维数组的声明和初始化
- 如何调用数组的指定位置的元素
- 如何获取数组的长度
- 如何遍历数组
- 数组元素的默认初始化值
- 数组的内存解析
一维数组的声明和初始化
public class test {
public static void main(String[] args) {
//数组声明
int[] numbers;
//静态初始化:数组的初始化和数组的赋值操作分开进行
numbers = new int[] {1001,1002,1003,1004};
//动态初始化:
String[] names = new String[5];
}
}
调用数组的指定位置的元素
names[0] = "jiangjiang";
如何获取数组的长度
System.out.println(names.length);
遍历数组元素
for (int i = 0; i < names.length; i++) {
String string = names[i];
System.out.println(names[i]);
}
数组元素的默认初始化值
public class Array{
int[] Array = new Array[6];
for(int i = 0;i<names.length();i++){
System.out.println(Array[i]);
}
}
输出默认的数组初始化值
byte、int、short的默认初始化值都是0,double、float的初始化值为0.0
char类型的默认初始化值为ASII码值的0,非字符‘0’
boolean的默认值是false
String的默认值是null
数组内存的解析
- 栈(stack)
局部变量:放在方法中的变量都是局部变量 - 堆(heap)
new出来的:对象、数组 - 方法区()
静态域:static修饰的
常量池:Sring
//数组静态初始化:
int[] arr = new int[]{1,2,3};
//在栈上声明一个int型数组:arr
//在堆上开辟一段连续的12个字节的空间
//把这段空间的首地址赋值给arr,把1、2、3、分别赋值给这段连续的空间
//动态数组初始化:
String[] arr1 = new String[4];
//在栈上声明一个int型数组:arr1
//在堆上开辟一段类型是String,长度为4的连续空间
//把这段空间的首地址赋值给arr1
arr[1] = "张三";
//arr[1]赋值
arr[2] = "李四";
//arr[2]赋值(实际张三、李四会放在常量池中,现在先不管)
arr1 = new String[3];
//在堆上再开辟一段空间,类型是String,长度为3的连续空间
//给arr1重新赋值
/*此时的原来的长度为4的没有引用
*那么会在适当的时机被jvm的垃圾回收机制回收掉
*/
System.out.println(arr1[1]);
这些都是定义在方法中的变量
当方法执行完以后,存在栈中的变量值会相继出栈
变量出栈以后,开辟的空间也会变成没有引用的空间 所以也会被回收掉