数据类型[] 数组名 = new 数据类型[数组的长度];
int [] arr = new int[5]; //动态初始化,可以存储5个int类型的数据
系统给出默认初始化值,整数类型(byte,short,int,long)都是0
浮点类型(float,double)都是0.0
布尔类型(boolean)是false 字符类型(char)是'u0000'
char在内存中占两个字节,是16个二进制位
u0000,每一个0代表的是16进制的0,那么四个0就是代表16个二进制位
[代表是数组,几个代表几维
I代表int类型
@是固定的
1db9742代表是16进制的地址值
-
栈
存储局部变量:定义在方法声明上和方法中的变量 -
堆
存储new出来的数组或对象
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
或简化为 数据类型[] 数组名 = {元素1,元素2,...};
int[] arr = new int[]{11,22,33,44,55};
此种形式可以先申明后赋值,即等价于
int[] arr; arr = {11,22,33,44,55};
或简化为int[] arr={11,22,33,44,55};
//静态初始化
数组操作异常
- ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引,下标越界 - NullPointerException:空指针异常
原因:数组已经不再指向堆内存,而你还用数组名去访问元素
int[] arr ={1,2,3};
arr = null;
System.out println(arr[0]);
数组元素反转(就是把元素对调)
class Demo10_Array {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
reverseArray(arr);
print(arr);
}
public static void reverseArray(int[] arr) {
for (int i = 0;i < arr.length / 2 ; i++) {
//arr[0]和arr[arr.length-1-0]交换
//arr[1]和arr[arr.length-1-1]交换
//arr[2]和arr[arr.lentth-1-2]
//...
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}
public static void print(int[] arr) {
for (int i = 0;i < arr.length ;i++ ) { //遍历数组中的每一个元素
System.out.print(arr[i] + " "); //打印在控制台
}
}
}
二维数组
- 格式: int[][] arr = new int[3][2];推荐
表示有3个一位数组,每个一维数组有2个元素.
其它格式也可表示: - 数据类型 数组名[][] = new 数据类型[m][n];
- 数据类型[] 数组名[] = new 数据类型[m][n];
数组的默认初始化值是null
二维数组的遍历
- 外循环控制的是二维数组的长度,其实就是一维数组的个数。
- 内循环控制的是一维数组的长度。
class Test1_Array {
public static void main(String[] args) {
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
for (int i = 0;i < arr.length ;i++ ) { //获取到每个二维数组中的一维数组
for (int j = 0;j < arr[i].length ;j++ ) { //获取每个一维数组中的元素
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}