Java数组
Random(随机数)
作用:用于产生一个随机数。
使用步骤:
1.导包
import java.util,Random;
2.创建对象
Random r=new Random();
3.获取随机数:
int num=r.nextInt(10);获取数据的范围[0,10)包括0,不包括10;
数组:
- 数组是存储多个变量(元素)的东西(容器)
- 多个变量的数组类型要一致
定义格式:
1.数组类型 [ ] 数组名;(推荐方式)
2.数据类型 数组名[ ];
举例:
int [ ] arr; 定义一个int类型的数组,数组名是 arr;
int arr [ ];定义一个int类型的变量,变量名为arr数组;
数组初始化:
1.所谓初始化;就是为数组开辟内存空间,并为数组中的每个元素赋予初始值
2.我们有两种方式实现数组的初始化
动态初始化 :只给出长度,由系统给出初始化值
静态初始化:给出初始化值,由系统决定长度
动态初始化:数据类型 [] 数组名 =new 数据类型 [ 数组长度];
举例: int [] arr =new int [3];
左边:
int:说明数组的元素类型是int类型
[]:说明是一个数组
arr:数组的名称
右边
new:为数组申请内存分配,开辟空间
int :说明是int类型
[]说明是一个数组
3为了数组长度,是数组中的元素个数
输出数组名:
数组中的每一个元素都是有编号,编号从0开始,最大的编号是数组的长度-1
通过数组名和编号的配合使用我们就可以获取指定编号的元素值
编号的专业名称:索引
访问格式:数组名[索引]
Java中的内存分配图解
- 栈(存储的是局部变量)
- 堆(存储的是new出来的东西)
- 方法区
- 本地方法区(和系统相关)
- 寄存器(给CPU使用)
栈:
存储的是局部变量
局部变量是定义在方法中的变量
使用完毕,立即回收
堆:
存储的是new出来的东西,实体 对象
每一个对象都有地址值
每一个对象的数据都有默认值
byte,short,int,long 0
float, double 0.0
char ‘\u 0000’
boolean false true
引用类型 null
使用完毕后,会在垃圾回收器 空闲的时间被回收
数组初始化静态初始化
静态初始化:
数据类型 [] 数组名 =new 数据类型[]{元素1,元素2,元素3,...};
举例:
int [] arr=new int[ ]{1,2,3}
简化格式:
数据类型 [] 数组名={元素1,元素2,元素3,...};
int [] arr={1,2,3}
数组操作的两个常见问题
1.ArrayIndexOutOfBoundException:数组索引越界异常
产生原因:我们访问不存在的索引
引用类型:类,接口,数组
常量:空常量,null 是可以赋值给引用类型的
2.NullPointerException:空指针异常
产生原因:数组已经不存在指向堆内存的数据了,你还使用数组名去访问元素
为了解决数组中的元素的个数:数组提供一个属性:length
用于获取数组元素的个数:格式 数组名.length
二维数组:就是元素为一维数组的数组
定义格式:
1.数据类型 [] [] 数组名;(推荐方式)
2.数据类型 数组名[][];
3.数据类型[]数组名[];
初始化:
1.动态初始化:
数据类型[][]数组名=new 数据类型[M][N];
M表示的是二维数组中一维数组的个数
N表示的是一维数组中的元素个数
2.静态初始化
数据类型[][]数组名=new 数据类型[][]{{元素1},{元素2},...};
简化格式
数据类型[][]数组名={{元素1},{元素2},...};
二维数组配合索引可以获取到一个一维数组
每一个一维数组配合索引名可以获取到数组中的元素
举例:
一个二维数组:arr
从中获取一维数组 arr [索引]
获取二维数组的元素:arr[索引][索引]