JavaSE个人学习心得(六)

JavaSE个人学习心得(六)

数组

一维数组

数组是一种容器,可以存储多个,同种类型的元素
定义格式:

1. 数据类型[] 数组名;
2. 数据类型 数组名[];

注意: 这种定义格式, 只是定义出了数组类型的变量, 容器还没有创建出来, 数据也没有存进去
格式化
  • 静态格式化
 完整格式:

 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3...};

 简化格式:

 数据类型[] 数组名 = {元素1, 元素2, 元素3...};
  • 动态格式化
在初始化的时候, 只需要指定数组的长度, 系统就会分配**默认初始化值**

格式:

 数据类型[] 数组名 = new 数据类型[长度];



细节:打印数组名的时候,会看到数组的内存地址

 [I@233ab4c

 @ : 分隔符
 [ : 当前空间是一个数组类型, 几个中括号, 就是几维数组
 I : 当前容器是一个int类型
 233ab4c : 十六进制内存地址

  • 默认初始化值分类

整数 : 0
小数 : 0.0
布尔 : false
字符 : ‘\u0000’ --> Unicode字符 --> 空白字符
引用数据类型 : null
引用数据类型 : 数组, 类, 接口

两种初始化的区别:

动态初始化 : 手动指定长度, 系统分配默认值
静态初始化 : 手动指定元素, 由系统计算出数组的长度

使用场景:

静态初始化 : 如果要操作的数据, 需求中已经明确给出了, 那就直接静态初始化

动态初始化 : 只知道要存储几个数据, 但是不明确具体元素的时候, 建议使用动态初始化
1. 需求: 键盘录入5个整数, 求最大值
2. 需求: 产生10个1~100之间的随机数, 求最小值

数组的遍历操作

对数组中的每一个元素进行操作,就可以对数组进行遍历
格式:

for(int i = 0; i < 数组名.length; i++){
// 操作

}

快捷键: 数组名.fori + 回车

数组名.length : 动态获取到数组的长度(元素的个数)
数组的常见问题

ArrayIndexOutOfBoundsException : 数组索引越界异常
原因: 当访问了不存在的索引

NullPointerException : 空指针异常
原因: 当一个引用数据类型的变量, 记录到null之后, 跟堆内存的指向就被切断了
这时候再想访问堆内存数据, 就会出现空指针异常
例:
int[] arr = null;
System.out.println(arr[0]);

二维数组

​ 二维数组也是一种容器,容器中存储的是一位数组

理解:容器的嵌套

什么时候去使用二维数组?

发现要操作的多组数据, 又是同一组数据, 就可以考虑使用二维数组来进行维护
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99

初始化
  • 静态初始化
    完整格式
数据类型[][] 数组名 = new 数据类型[][]{ {一维数组1}, {一维数组2}  };

int[][] arr = new int[][] {
	{11,22,33},
	{33,44,55}
};

简化格式:

数据类型[][] 数组名 = { {一维数组1}, {一维数组2}  };

int[][] arr = {
	{11,22,33},
	{33,44,55}
};

System.out.println(arr[1][0]);	// 33
  • 动态初始化
    格式:
数据类型[][] 数组名 = new 数据类型[m][n];

m : 指定这个二维数组, 可以存储多少个一维数组
n : 指定每一个一维数组, 可以存储多少个元素


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

这个二维数组, 可以存储两个2一维数组, 每一个一维数组可以存储3个元素.

也可以将提前创建好的一维数组直接存入二维数组

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

int[] arr1 = {11,22,33};
int[] arr2 = {44,55,66};

arr[0] = arr1;
arr[1] = arr2;
二维数组的遍历操作

思路

  • 遍历二维数组获取到每一个一维数组
  • 遍历每一个一维数组,获取到每一个元素
int[][] arr = {
	{11,22,33},
	{33,44,55}
};

for(int i = 0; i < arr.length; i++){
	// arr[i] : 每一个一维数组
	for(int j = 0; j < arr[i].length; j++){
		System.out.println(arr[i][j]);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值