Java数组
一:Random随机数
作用:用于产生一个随机数
流程:
A:导包 java.util.Random
B: 创建对象 Random r = new Random();
C: 产生随机数 int number = r.Random(10); 这里表示[0,10)之间的整数
二:java一维数组
数组是存储多个变量(元素)的容器 注意:数组中的元素的数据类型要保持一致
定义格式:
1:数据类型[ ] 数组名 (推荐使用)
2:数据类型 数组名[ ]
数组初始化
A:所谓初始化,就是为数组开辟内存空间,并为数组中的每一个元素赋予初始值
B:两种方式可以实现数组初始化
(1)动态初始化 只给出长度,有系统给出初始化值
(2)静态初始化 只给出初始化值,长度有系统决定
<1>动态初始化
格式:数据类型 [ ] 数组名 = new 数据类型[ 数组长度 ]
格式解释:
int[ ] arr = new int [ 3 ]
左边:int 表示数组中的元素的数据类型为int
[ ] 表示一个数组
arr 表示数组名称
右边:new 表示为数组申请内存分配开辟空间
int 表示数组中的元素的数据类型
[ ] 表示一个数组
3 表示数组中元素个数(数组长度)
<2>数组中的元素访问
注意:我们输出数组名称时,输出的是数组的地址
java数组中每一个元素都有自己的编号(下标),从0开始到(数组长度-1),通过数组名和编号一起使用可以获取指定编号的元素值
编号专业名称叫“索引”
访问格式: 数组名[索引];
<3>java中内存分配
栈 存储局部变量
堆 存储new出来的东西
方法区 面向对象讲 ,这里暂时不讲
本地方法区 和系统有关 这里暂时不讲
寄存器 和cpu有关 这里暂时不讲
A:栈:存储局部变量 使用完毕垃圾回收器立即回收 B:堆:存储的是new出来的东西,实体,对象
局部变量是定义在方法中的变量 1:每一个对象都有地址值
int [ ] arr = new int[3]; 2:每一个对象的数据都有默认值
System.out.println(arr); byte,int,short,long默认0;float,double默认0.0
System.out.println(arr[0]); char默认‘\u0000';boolean默认false
System.out.println(arr[1]); 引用类型(类,接口,数组)默认null;
System.out.println(arr[2]); 3:使用完毕后,会在垃圾回收器空闲的时
侯回收;
(1)一个数组的内存分配
(2)两个数组的内存分布
(3)两个数组指向同一个地址
<4>静态初始化
格式:数据类型[ ] 数组名 = new 数据类型[ ] {元素1,元素2..........};
简化格式: 数据类型[ ] 数组名 = {元素1,元素2..........};
<5>数组操作两个小问题
A:ArrayIndexOutOfBoundsException; 索引数组越界问题
原因:访问了不存在的索引
B:NullPointerException;空指针异常
产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
<6>数组遍历
数组元素个数:使用元素length
格式:数组名.length
三:二维数组
定义格式
数据类型[ ][ ] 数组名;
数据类型 数组名[ ][ ]; 不推荐
数据类型[ ] 数组名[ ]; 不推荐
初始化方式
数据类型[ ][ ] 变量名 = new 数据类型[m][n];
数据类型[ ][ ] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:数据类型[ ][ ] 变量名 = {{元素…},{元素…},{元素…}};
二维数组名配合索引可以获取每一个一维数组,每一个一维数组配合索引可获取数组中的元素