Java学习之路Day6

数组

多个相同类型的数据按照顺序排列的集合

常见概念:

  • 数组名
  • 数组下标(可以用来访问和修改数组中元素的值)
  • 元素(数组中存放的值)
  • 数组的长度(用来表示数组中存放有多少元素)

数组的特点:

  • 数组中存放的元素的类型都是相同的。
  • 数组是有序排列的。
  • 数组是引用类型数据的一种数组类型。
  • 数组的元素可以使基本数据类型,也可以是引用数据类型
  • 数组对象在内存中分配的是一块连续的存储空间。
  • 数组名中引用的是这块连续空间的首地址
  • 数组的长度一旦确定,就不能再修改!

数组的分类:

  • 按照维数分类:一维数组、二维数组…
  • 按照数组元素类型:基本数据类型元素的数组、引用数据类型元素的数组。

一维数组

一维数组的声明和初始化
// 一维数组的声明和初始化
int[] ids; // 声明
ids = new int[] { 1001, 1002, 1003, 1004 }; //初始化

//静态类型的声明和初始化
int[] ids = new int[] { 1001, 1002, 1003, 1004 };

//动态类型的声明和初始化
String[] names = new String[5]; //元素是动态的,不确定的。

//注意:在声明和初始化过程中,不能既指定了长度,有赋了相应的值;不能静态初始化和动态初始化合二为一。
//错误示范
// int[] arr3 = new int[4] {1001, 1002, 1003, 1004};

总结:
初始化时,元素确定了就是静态初始化,元素未确定是动态初始化。

如何调用数组的指定位置的元素

通过下标的方式调用数组中执行元素的值。
注意数组的下标是从0开始的,倒数租的length - 1结束。超出范围,报数组越界异常!

String names = new String[4];
names[0] = "无名";
如何获取数组的长度

数组有一个length属性,可以通过数组名.length获取数组中元素的个数,即数组的长度。

String names = new String[4];
System.out.println(names.length); // 4
如何遍历数组

遍历数组中所有元素的值。

String names = new String[4];
for (int i = 0; i < names.length; ++i) {
	System.out.println(names[i]);
}
数组元素的默认初始化值

总结

  • 数组元素为byte、short、int、long 未初始化时默认值为0
  • 数组元素为float、double 未初始化时默认值为0.0
  • 数组元素为char 未初始化时默认值为:ASCII为0的值NUL
  • 数组元素为boolean型, 未初始化时默认值为:false
  • 数组元素为引用数据类型 默认值为null
数组的内存解析
	public static void main(String[] args) {
		String[] names = new String[2];
		names[0] = "无名";
		names[1] = "孙强";

上述代码的解析:在这里插入图片描述

当main方法之行结束之后,栈中的变量将会弹出,释放相应的空间,所以,在堆中的数组将不会被引用。根据引用计数算法,未被引用的数据将被视为“垃圾”,会自动被垃圾回收机制GC释放。

二维数组

根据上述一维数组的特点:数组本身是引用类型,数组元素的类型可以是基本数据类型,也可以是引用数据类型。所以,二维数组可以看做是,数组元素是一维数组的一维数组。

一维数组的声明和初始化
//1.二维数组的初始化
//方式一:静态初始化
int[][] arr = new int[][]{{1, 2, 3},{4, 5, 6}};

//方式二:动态初始化
int[][] arr = new int[3][4]; //通俗的理解,确定了3行4列
int[][] arr = new int[3][];//确定了3行,列数不确定

//正确的声明初始化方式
String[][] arr = new String[3][4];
String[] arr[] = new String[3][4];
String arr[][] = new String[3][4];
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}}


//错误示例
String[][] arr = new String[][4]
String[3][4] arr = new String[][];
int[][] nums = new int[4][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9},{10, 11, 12}};

如何调用数组的指定位置的元素
//数组下标始终从0开始
//如果想使用数组中第2行第1列的元素
int[][] nums = new int[][] = {{1, 2, 3},{4, 5, 6},{7, 8, 9},{10, 11, 12}};
int num = nums[1][0];

//给数组中的元素赋值
int[][] nums1 = new int[4][];

//如果先要给数组中第2个元素赋值
arr[1] = new int[5];

如何获取数组的长度
int[][] arr = {
	{1, 2, 3},
	{4, 5, 6},
	{7, 8, 9}
};
int lengthRow = arr.length; //理解为获取二维数组的行数
int lengthCol = arr[0].length; //理解为获取二维数组中第一行的列数
数组元素的默认初始化值

规定:二维数组分为外层数组的元素,内层数组元素
int[][] arr = new int[4][3];
外层元素:arr[1],arr[2]…
内层元素:arr[1][2], arr[0][1]…

总结:
初始化方式一:
int[][] arr = new int[4][3];
外层元素的初始化值为:哈希地址值
内层元素的初始化值与一维数组的元素初始化情况相同。

初始化方式二:
int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:内层元素不存在不能调用内层元素,否则出现空指针异常。


int[][] arr = new int[4][3];  //已经默认初始化了哦
int[][] arr1 = new int[4][];
String[][][] arr2 = new String[4][3][5];
System.out.println(arr11); //哈希地址值    [[[Ljava.lang.String;@6504e3b2  [[[三维数组 Ljava.lang.String;表示String类型数组
System.out.println(arr9); //哈希地址值 [[I@6504e3b2 [[表示二维数组 I表示整型数组
System.out.println(arr9[0]); //哈希地址值 [I@515f550a [表示一维数组 I表示整型组数
System.out.println(arr10[0]); //null
System.out.println(arr9[0][0]); //0

数组的内存解析
int[][] arr = new int[2][3];

在这里插入图片描述

int[][] arr = new int[2][];

在这里插入图片描述
总结

  1. 在二维数组中,外层数组元素的值只能有两种情况,要么为null,要么为地址值。内层元素的值可以是基本数据类型,也可以是引用数据类型。
  2. 计算机中只存在数组,并不存在二维数组,计算机中通过外层数组元素存储内层数组的地址来表示所谓的“二维数组”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值