数组
数组的概念
什么是数组:
数组:容器(大)
变量:容器(小)
为什么需要数组:存储的同一类型的数据个数比较多的时候
数组的特点:
- 数组是引用数据类型
- 数组存储的是同一种类型的数据
- 数组的长度在运行期间不能改变
数组的定义格式
数组的定义格式(动态初始化)
数据类型[] 数组名 = new 数据类型[ 长度];
解释各个组成部分:
数组的定义格式(静态初始化)
数据类型[] 数组名 = new 数据类型[]{元素1,元素2...}
注意事项:
静态初始化的数组也是有长度的
数组的定义格式(省略静态初始化)
数据类型[] 数组名 = {元素1,元素2...}
注意事项:
静态省略初始化不能拆分为两个步骤
问题:
什么情况下用静态除初始化,什么情况下用动态初始化?
元素内容确定用静态,元素内容不确定用动态。+
访问数组元素
取值:
获取数据元素的格式:数据类型 变量名 = 数组名[索引值];
索引值的取值范围:0 —— 数组长度-1
赋值:
通过动态方式定义数组后,数组的默认值是:
整数 0
浮点数 0.0
char 不可见字符
布尔值 false
引用数据类型 null
赋值格式:数组名[索引值]=对应类型的值;
Java的内存划分
Java的内存分为哪几部分,以及各自的作用:
方法区:保存.class字节码相关信息
栈:方法运行在栈中。方法中变量的定义在栈中
堆:new出来的都在堆中
本地方法栈:和操作系统相关
程序计数器(寄存器):和CPU相关
- 数组的长度在运行期间不能变
常见异常
数组索引值越界异常:ArrayIndexOutOfBoundsException;
//引用数据类型的值为null,你继续对变量(对象)进行操作,这时候就会报如下的异常
空指针异常:NullPointerException;
数组的遍历
获取数组的长度: 数组名.length;
遍历格式:
for(int i=0;i<数组名.length;i++){
数据类型 变量名 = 数组名[i];
}
数组练习
求数组中的最值
思路:
- 假设某个元素是最值,一般会假定第一个元素
- 其他元素一次和最值进行比较,用循环
- 如果比最值(大/小),用该元素的值替换最值
两个数交换值
思路:找第三个临时变量
数组元素反转
思路:对应位置的元素互换
- 定义两个变量进行初始化
- 在什么情况下停止交换(判断条件)
- 进行交换
数组作为方法的参数和返回值
- 数组作为方法的参数:
- 数组作为方法的参数传递的是地址值
public static void main(String[] args) {
int[] scores = {66,77,88,99,100};
//调用修改分数的方法
changeScores(scores);
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
}
//给数组+10方法,引用数据类型作为参数传递的是地址值
public static void changeScores(int[] scores) {
for (int i = 0; i < scores.length; i++) {
scores[i]+=10;
}
}
数组作为方法的返回值:数组作为方法的返回值返回的是地址值
基本数据类型作为参数传递的是 “数值”
public static void main(String[] args) {
int num = 10;
changeNum(num);
System.out.println("num="+num); //10
}
//基本数据类型作为参数传递的是 数值
public static void changeNum(int num) {
num+=10;
System.out.println("number="+num); //20
}