一、数组初始化
方式:分为静态初始化和动态初始化
静态:数据类型[] 数组名={data,data,data};
数据类型[] 数组名=new 数据类型{data,data,data};
动态:数据类型[] 数组名=new 数据类型[指定长度];
int[] arr1={11,22,33,44};//静态初始化法一
int[] arr2=new int[]{1,33,44,56};//静态初始化法二
//动态初始化
int[] arr2=new int[10];
静态和动态都可以分两步走
//静态
int[] arr1;
arr1=new int[]{12,44,34};
//动态
int[] arr2;
arr2=new int[10];
如果没有初始化,各数据类型的数组都有默认值
二、数组使用
通过下标访问,从0开始,到n-1,长度为n
int[] arr4={12,243,54,67};//长度为4
System.out.println(arr[0]);
System.out.println(arr[3]);//下标最大为三,超过就越界
可通过arr4.length来获取数组长度
遍历访问
最简单的,通过for循环让下表不断+1来访问
另一种:
for(int x:arr4)//":"右边为你要遍历的数组名,左边为改数组元素的数据类型
{
System.out.println(x);
}
三、数组指向NULL
例如下面这种情况
int[] arr3=null;
访问的时候会提示NullPointerException,即空指针异常
四、数组作为形参传入方法内需注意的点
public static void fun2(int[] arr){
arr=new int[]{89,23,56};
}
public static void main(String[] args){
int[] arr1=new int[]{12,34,54,67};
fun2(arr1);
System.out.println(Arrays.toString(arr1));
}
当把arr1数组传入fun2的函数后,在主函数内打印arr1时会发现依然是打印出[12,34,54,67]
而不是[89,23,56]
这是因为
在fun2内当new了一个新的数组时,新创建数组的地址也是新的,然后把这个新的地址再赋值给arr
,所以虽然传入的时arr1数组,当执行arr=new int[]{89,23,56}这条语句时,arr指向的不是arr1的地址,因此没有改变arr1的元素
五、数组作为返回值的类型
public static int[] fun(){
int[] arr={12,45,21,456};
return arr;
}
public static void main(String[] args) {
int[] arr1=fun();
System.out.println(Arrays.toString(arr1));
}
返回了一个地址,赋值给arr1,arr1救指向了堆上{12,45,21,456}的内存空间,所以打印的结果是[12,45,21,456]
六、无返回值对数组进行修改
//无返回值进行对数组的修改
public static void fun2(int[] arr){
for (int i=0;i<arr.length;i++){
arr[i]*=2;//arr[i]=arr[i]*2,改变了堆上的元素
}
}
public static void main(String[] args) {
int[] arr2=new int[]{12,13,14,15};
fun2(arr2);
System.out.println(Arrays.toString(arr2));
返回值的结果为每个元素乘2倍的结果
}