1.数组:存储同一种数据类型的多个元素的容器
定义格式:
A:数据类型[ ] 数组名;(推荐的使用方式)
B:数据类型 数组名[ ];
这两种格式都一样
举例:
int [ ] arr ; 定义了一个int类型的数组,数组名是arr;
int arr[ ] ; 定义了一个int类型的变量,变量名是arr数组
2.数组的初始化:
A:所谓的初始化,其实就是为数组开辟内存空间,并为数组中的每个元素赋予初始值。
B:对数组初始化的两种方式
a:动态初始化 只给出长度,由系统给出初始值
b:静态初始化 给出初始化值,有系统决定长度
动态初始化:
数组类型[ ] 数组名 = new 数组类型[数据长度];
-
左边:
int:说明数组中的元素的数据类型是int类型
[ ]:说明这是一个数组
arr:是数组的名称 -
右边:
new:为数组分配内存空间
int:说明数组中的元素的数据类型是int类型
[]:说明这是一个数组
3:数组的长度,其实就是数组中的元素个数
3.获取数组中的元素:
通过输出数组名,得到的是一个地址值
格式:数组名[索引]
4.java的内存分配:
栈:(存储的是局部变量)先入后出,后入先出
堆:(存储的是new出来的东西)
方法区:(面向对象部分讲解)
本地方法区:(和系统相关)
寄存器:(给CPU使用的)
栈:
存储的是局部变量(如:int[ ] arr)
局部变量就是定义在方法中的变量
使用完毕,立即回收
堆:存储的就是new出来的东西,实体,对象。
A:每一个对象都有地址值
B:每一个对象的数据都有默认值
byte,short,int,long 0
float,double 0.0
char ‘\u0000’
boolean false
引用类型 null
C:数据使用完毕后,会在垃圾回收器空闲的时候被回收
5.一个数组的内存图
6.两个数组的内存图
7.两个数组指向同一个堆内存的内存图
如果两个数组拿的是同一个堆内存的地址,任何一个数组对堆内存的数据进行了修改,另一个访问到的也是修改过的。
8.数组初始化的静态初始化:给出数组中的元素值,有系统决定数组长度
格式:数据类型[ ]数组名 = new 数据类型[ ]{元素1,元素2,元素3,。。。。};
简化格式:数据类型[ ]数组名 = {元素1,元素2,元素3,。。。。}
9.数组操作的两个常见小问题
a:访问了不存在的索引,造成数组索引越界异常(ArrayIndexOutOfBoundsException)
(引用数据类型:类,接口,数组)
(常量:null,它是可以赋值给引用数据类型的,表示该引用不再指向堆内存的数据)
b:空指针异常
例如:arr = null;
System.out.println(arr[1]);
控制台报错:空指针异常:NullPointerException
10遍历数组:
length:用于获得数组中的元素个数
格式:数组名.length
数组遍历的标准版代码:
11数组操作之获取最值
寻找参照物进行比较
12.数组练习之评委打分
1.3数组练习之不死神兔