数组的定义
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问,下标从0开始
数组的创建
首先必须声明数组变量,才能在程序中使用数组
数值有三种初始化,分别为静态初始化、动态初始化和默认初始化。因为数组是引用类型,因此和类一样,数组的元素相当于类的实例变量,在数组创建被分配空间以后,会被隐式的初始化
public class Hello {
public static void main(String[] args) {
int[] nums; //数组的声明,数组类型int[]
nums = new int[10]; //数组的创建,new对象
int[] nums2 = new int[10]; //两步可以合成一步
//动态初始化
nums2[0] = 1; //根据下标给数组赋值
//静态初始化
int[] num3 = {1, 2, 3, 4}; //也可以直接给数组赋值
//默认初始化,值为0
int[] num4 = new int[10];
int sum = 0;
for (int i = 0; i < num3.length; i++){ //.length方法获取数组的长度
sum += num3[i]; //数组下标从0开始,因此最大是num3.length - 1,超出会发生数组越界错误
}
System.out.println(sum);
System.out.println(num4[0]);
}
}
内存分析
- 栈:存放基本变量类型(包含数值)、引用对象的变量(只是该引用在堆里面的具体地址)
- 堆:存放new的对象和数组,可以被所有线程共享,不会存放别的对象引用
- 声明数组时,只是在栈中存放了一个数组名,只有在创建数组时,才会在堆中分配new对象的空间,此时栈中的数组名成为对象的引用
数组的基本特点
- 数组的长度是确定的,一旦被创建,其大小不可再更改
- 数组的元素必须是相同类型,不允许出现混合类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组本身就是对象,数组元素相当于对象的成员变量。无论其保存的是原始类型还是其他对象类型,数组对象本身是在堆中的
数组的使用
增强for循环(不常用)
public class Hello {
public static void main(String[] args) {
int[] num = {1, 2, 3, 4, 5}; //定义一个数组
for (int i:num){ //从数组里依次取出值,类似Python语言的for...in结构
System.out.println(i);
}
}
}
数组作为方法传参
public class Hello {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
PrintArray(arrays); //数组作为方法的参数
}
//打印数组元素
public static void PrintArray(int[] arrays){
for (int i = 0; i < arrays.length; i++){
System.out.print(arrays[i] + "\t");
}
}
}
数组作为返回值
public class Hello {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
PrintArray(reverse(arrays));
}
//将数组元素反转
public static int[] reverse(int[] arrays){ //注意返回值类型为int[]
int[] newArrays = new int[arrays.length];
for (int i = 0; i < arrays.length; i++){
newArrays[arrays.length - 1 - i] = arrays[i];
}
return newArrays; //数组作为返回值
}
//打印数组的元素
public static void PrintArray(int[] arrays){
for (int i = 0; i < arrays.length; i++){
System.out.print(arrays[i] + "\t");
}
}
}