(一)数组
变量: 只能存储一个值
数组: 存储的一组相同数据类型的值, 存储个数: 由程序员在创建的数组的时候来指定,
缺点: 固定长度
也称为: 容器
1.数组要素:
1) 数组名
2) 数据类型
3) 元素
4) 下标: 获取指定位置的元素: 从0开始: 0 表示第一个元素, 1表示第二个元素....
0=<下标<数组长度
5) 数组的长度: 表示数组最大允许存多少个元素
2.使用数组: 一维数组
1.声明数组: 没有开辟空间
语法:
数据类型[] 数组名;
数据类型 数组名[];
2.开辟空间, 指定数组的长度 通过new关键字, 数组开辟空间是连续
数组名 = new 数据类型[长度];
注意:
> new 数组的方式: 除了开辟内存空间, 还会对数组中元素进行初始化(赋予初始值)
> 初始值根据数据类型决定:
int/byte/short/long: 初始值0
double/float: 初始值:0.0
char: \u000
boolean: false
String/类类型: null
3.往数组中存放元素: 通过下标
数组名[下标] = 值;
注意:
如果下标超出最大下标(数组的长度-1): 抛出一个数组越界的异常 ArrayIndexOutOfBoundsException: 5
如果一个数组没有开辟空间, 不能存放数据, 编程出错
4.获取数组的元素,进行相关操作
通过下标: 数组名[下标]
如果下标超出最大下标(数组的长度-1): 抛出一个数组越界的异常
ArrayIndexOutOfBoundsException: 5
在实际开发中,可能使用循环遍历这个数组(把数组的元素一个一个拿出来), 最匹配:for
动态的获取数组的长度: 数组提供了一个属性:
> 数组名.length 获取该数组的长度
可以把1,2,3(声明数组,开辟空间,存元素)合并成一行代码, 数组静态创建
数据类型[] 数组名 = new 数组类型[]{值1,值2,值3,...}
注意: new后面中括号不能写长度, jdk根据后面值的个数确定数组的长度
简写: 数据类型[] 数组名 ={值1,值2,...}
5.数组的数据类型: 可以基本数据类型, 也可以是类类型, 对象数组
实际使用数组中:
对数组中的元素进行添加,删除,修改,查询操作,通过下标获取元素
6.java内存模型:
栈区: 方法执行时, 方法入栈, 存放的临时变量,当方法执行完成之后, 出栈,该方法往栈区存放临时变量空间都会回收
堆区:new 出来的东西都存在堆区, java提供的GC(垃圾回收器)机制 方法区:字节码文件(.class文件)加载时进入的内存
本地方法栈:调用操作系统相关资源
(二)二维数组
由多个一维数组组成, 称为二维数组
三维数组: 由多个二维数组组成
1.声明一个二维数组:
//1,声明数组
数据类型[][] 数组名;
//2.开辟空间
数组名 = new 数据类型[长度1][长度2]
长度1: 表示的一维数组的个数
长度2: 表示的一维数组的元素个数
//3.赋值 通过下标
数组名[i][j] = 值;
//4.使用: 通过下标
数组名[i][j]
遍历一维数组: 一个for循环
遍历二维数组: 两个for循环
2.二维数组的静态初始化
//一维数组的静态初始化
int[] arr = new int[]{1,2,3,4,5};
int[] arr2 = {1,2,3,4,5};
//二维数组:
int[][] arr3 = {{1,2,3},{4,5,6},{7,8,9}};
二维数组的一维数组长度: 数组名.length
二维数组的指定下标的一维数组元素个数: 数组名[下标].length
二维数组的元素个数: 数组名[0].length+数组名[1].length+...+数组名[数组名.length-1].length