JavaSE02: 数组的基本知识
今天是超梦学习Java的第15天,一转眼就要结束基础部分的学习了,接下来四天也要为期末的离散数学好好复(yu)习了,在每天完成复习任务后会后多写博客,复习前面的知识哦~
什么是数组?
简单来说,数组是一个存储相同类型数据的集合,因为它在内存中是连续的一片,所以我们用编号(也就是下标来管理它)。这些数据可以是基本数据类型也可以是引用数据类型,而数组本身也是一种引用数据类型。数组的长度一旦确定,就不能修改了。
一维数组
一维数组的声明
和其他数据类型一样,数组依旧遵循声明变量的规则:
type[] arr 或 type arr[]
如: int[] a; double b[]; String[] s;从变量声明的角度,前面一种声明方式是更容易理解的。
一维数组的初始化
①静态初始化:在定义数组的同时就为数组元素分配空间并赋值。也就是在声明时就把所有元素的值都确定了。有以下两种方式:
int arr[] = new int[]{1,2,3,4};
String names[] = {“张三”,“李四”,“王五”};
②动态初始化:声明数组为其分配空间但不赋值,在后面的使用再赋值。如:
int[] arr = new int[3];//声明数组但不赋值
arr[0] = 1;//第一个元素赋值为1
需要注意的是,若声明并new为其分配内存后,若在随后的使用不提供赋值操作,系统会默认提供初始化值。数值型的数据默认为0,char型默认为空,boolean默认为false,引用数据类型默认为null。数组也可以先声明但不分配内存,如:
int[] arr;
但若在后面不分配空间就使用,会出现空指针异常,这将在后面的内存解析详细解释。
使用一维数组
正如前面所说,我们用new分配空间后才能使用数组。数组的元素在内存是连续存在的。所以我们可以通过下标来使用数组元素。数组元素的下标从0开始,所以最后一个元素是数组长度-1,每个数组都提供了length属性:
int[] arr = new int[]{
1,2.3}
arr[0] = 10;//将第一个元素赋值为0
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i])
}//进行遍历
一维数组的内存解析
数组是引用数据类型,而引用数据类型存储的是地址值,通过这个地址值可以找到数组的元素,声明数组并分配内存:
int[] arr = new int[4];
前面提过,如果只声明数组这个变量而不new出来,那么该变量在栈中就没有指向具体数组元素的地址,使用它时也就找不到数组元素来使用,这时会出现空指针异常。
二维数组
什么是二维数组?
在内存中,其实并没有二维数组这一说法。在前面的内容中,我们提到,一维数组的元素既可以是基本数据类型也可以是引用数据类型,而当一维数组每个元素都用来存储一个一维数组,就构成二维数组,这么说或许有些抽象,后面超梦将用内存解析图为你详细解析。
二维数组的初始化
①静态初始化:跟一维数组差不多的初始化方式:
int[][] arr = new int[][]{
{
1,2,3},{
1,2},{
1,2,3,4}};
需要注意的是,java的二维数组不一定要是规则矩阵形式。
②动态初始化:先声明再赋值
int[][] arr = new int[3][4];//声明一个三行四列的二维数组,数组元素值默认初始化
还有这种方式:
int[][] arr = new int[3][];
需要注意的是,每个一维数组需要再new出来才能使用:
int[0] = new int[3];//第一个数组有三个元素
int[1] = new int[2];
int[2] = new int[4];
使用二维数组
同样地,二维数组通过下标去使用数组元素,也提供了length属性,下面用上面声明的数组来遍历:
for(int i = 0; i < arr.length; i++){
for(int j = 0; i < arr[i].length; j++){
arr[i][j] = 1;//遍历每个元素并赋值为1
}
}
二维数组的内存解析
接近尾声了,那么就明明白白地安排上我们的二维数组内存解析吧~
写在最后:每次写博客的速度总是很慢,希望能够坚持下来并提高速度吧~后面一期将会为大家带来Arrays工具类的使用以及一些简单的数组算法
~
写在最后:每次写博客的速度总是很慢,希望能够坚持下来并提高速度吧~后面一期将会为大家带来Arrays工具类的使用以及一些简单的数组算法