1、数组的理解(Array)
可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
从底层的运行机制来看,没有多维数组
概念:数组的外层元素;数组的内层元素
Java中的容器:数组、集合框架:在内存中对多个数据的存储。
2、相关概念:
>数组名
>数组元素(即内部存储的多个元素)
>数组的下标、角标、下角标、索引、index(即找到指定数组元素所使用的编号)
>数组的长度(即数组容器中存储的元素的个数
3、数组元素默认初始化值的情况
3.1以动态初始化方式一说明:int[][] arr1 = new int[3][2];
外层元素:默认存储地址
内层元素:默认与一维数组元素的不同类型的默认值规定相同
注意:以数组的动态初始化方式为例说明。
//整型数组:0
//浮点型数组:0.0
//字符型数组默认初始化值:0或者'\u0000'
//boolean数组:false
//引用数据类型数组:null
3.2以动态初始化方式二说明:int[][] arr4 = new int[4][];
外层元素:存储null
内层元素:不存在,空指针异常。NullPointerException
4、数组内存的解析
4.1 Java中的内存结构是如何划分的?(主要关心JVM的运行时内存环境)
>将内存划分为5各部分:程序计数器、虚拟机栈、本地方法栈stack、堆heap、方法区
>与目前数组相关的内存结构: int[] arr = {1,2,3};
>虚拟机栈:存放方法中声明的变量。eg:arr
>堆:存放数组的实体(即数组中所有的元素)。eg:1,2,3
public class TwoArrayTest {
public static void main(String[] args) {
//1.数组的声明和初始化
//复习:一维数组
int[] arr1 = new int[]{1,2,3};
//静态初始化:数组变量的赋值和数组元素的赋值同时进行
int[][] arr2 = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
//动态初始化:数组变量的赋值和数组元素的赋值分开进行
String[][] arr3 = new String[3][4];//只声明长度,不写内容
//其他正确的方式
double[][] arr4 = new double[2][];
int[][] arr5 = {{1,2,3},{4,5},{6,7,8,9}};//类型推断
String arr6[][] = new String[3][4];
int[] arr7[] = {{1,2,3},{4,5},{6,7,8,9}};
//错误的方式
//int[][] arr2 = new int[3][3]{{1,2,3},{4,5,9},{6,7,8}};
//2.数组元素的调用
//调用内层元素
System.out.println(arr2[0][0]);//1
//调用外层元素
System.out.println(arr2[0]);//[I@1b6d3586
//测试arr3 arr4
arr3[0][1] = "tom";
System.out.println(arr3[0][1]);
System.out.println(arr3[0]);//[Ljava.lang.String;@4554617c
arr4[0] = new double[4];
arr4[0][0] = 1.0;
//3.数组的长度
//使用length属性表示
System.out.println(arr2.length);//3
System.out.println(arr2[0].length);//3
System.out.println(arr2[1].length);//2
System.out.println(arr2[2].length);//4
//4.如何遍历数组
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j] + "\t");
}
System.out.println();
}
}
}