1、概念
临时储存数据的容器,在java中,数组是最基本也是运算最快的容器。
2、格式
静态初始化(只确定长度,系统分配初始值):
int[] arr = new int[5];
int arr[] = new int[4];
动态初始化(确定初始值,系统决定长度):
int[] arr = new int[]{20,5,100,30,5};
int arr[] = {20,5,100,30,5};
3、默认值
数据类型 | 默认初始值 |
---|---|
byte、short、int、long | 0 |
float、double | 0.0 |
char | 空格,‘\u0000’ |
boolean | false |
引用数据类型 | null |
4、访问
直接打印数组名,打印的是数组堆内存中的地址;数组中的每个元素都是有编号的,编号是从0开始的,最大的编号就是数组的长度-1,这个编号叫做索引。 使用数组名.length可以获取数组长度。
int[] arr = {20,5,100,30,5};
那么arr[0]=20
arr[0]=3,那么3会替代20成为数组的第一个元素。
5、注意
数组的长度是固定的;一个数组中只能存储一种类型的数据;空指针异常:变量完全没有值或值为null,数组不指向一个堆内存的地址;数组索引越界异常:当数组中不存在该索引却访问该索引时。
6、java中的内存分配
栈——又叫栈,仅次于寄存器,用于存储局部变量(局部变量是定义在方法中或者语句中的变量,局部变量使用完毕,立即回收)
堆——通用内存池,用于存放所有引用数据类型对象。每个对象均有地址,且有默认初始化值。New出来的东西。(每一个对象都有首地址值,是一个十六进制的地址,使用完毕后,会被垃圾回收器空闲的时候回收)
方法区——又叫静态区,存放所有的class和静态变量,方法区存放的是整个程序中唯一的元素,如class和static变量。
本地方法区 ——和系统相关
7、数组遍历
public class Demo {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); }
}
}
8、参数传递
☆基本类型作为参数传递:如果传入的数值为基本数据类型(含String类型),形参的改变对实参不影响。
public class Demo {
public static void main(String[] args) {
int a=10;
change(a);
System.out.println("a="+a);//10
}
public static void change(int a){a=100;}
}
☆引用数据类型作为参数传递:形参的改变对实参有影响(数组是引用数据类型)
public class Demo {
public static void main(String[] args) {
int[] arr={10,20};
change(arr);
System.out.println("arr[0]"+arr[0]);//100
System.out.println("arr[1]"+arr[1]);//200
}
public static void change(int[] arr){
arr[0]=100;
arr[1]=200;
}
}
9、二维数组
当数组中储存的元素仍为数组时,该数组称为二维数组。
☆格式:
数据类型[][] 数组名;数据类型 数组名[][];数据类型[] 数组名[]。
☆初始化:数据类型[][] 变量名 = new 数据类型[m][n];数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};数据类型[][] 变量名 = {{元素…},{元素…},{元素…}}。
☆具体定义:
1、int[][] arr = new int[3][4];即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组。
2、int[][] arr = new int[3][];即二维数组的长度为3,其中每个元素的长度不确定。
3、int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};即二维数组的长度为3,三个元素分别为{1,2}、{3,4,5,6}、{7,8,9}。
☆访问:
public class Demo {
public static void main(String[] args){
int[][] a = new int[3][4];
System.out.println(a);//[[I@32784a
System.out.println(a.length);//3
System.out.println(a[1]);//[I@3fa5ac
System.out.println(a[1].length);//4
a[0][0] = 100;
System.out.println(a[0][0]);//100
int[][] b = {{1,2},{3,4,5,6},{7,8,9}};
System.out.println(b[0][0]);//1
int[][] c = new int[3][];
System.out.println(c[0]);//null
c[0] = new int[]{1,2,3};
System.out.println(c[0][0]);//1
}
}
☆遍历:
public class Demo {
public static void main(String[] args){
int[][] b = {{1,2},{3,4,5,6},{7,8,9}};
for(int j=0; j<a.length; j++){
for(int k=0;k<a[j].length; k++){
System.out.println("a[j][k]");}
}
}
}