今日内容
数组
数组的概念
数组是一种容器,可以存储多个元素
之前我们学习过的变量其实就是一种容器,但是因为一个变量只能存储一个数据,所有如果
有多个数据需要存储,我就需要定义多个变量。变量足够多的时候,定义变量就太麻烦了,这时
我们就出现了一种可以存储多个元素的容器,就是数组。
特点:
(1)数组是一种容器,可以存储"同一种数据类型"的多个元素
(2)数组有整数索引(编号),索引的范围在0~数组的长度-1
(3)数组存储的元素即可以是基本数据类型,也可以是引用数据类型
(4)数组一经初始化长度就固定了
数组的定义
数据类型[] 数组名; // 推荐使用的方式
举例:int[] array;
数据类型 数组名[];
举例:int array2[];
数组的初始化
动态初始化:在初始化的时候给定数组的长度,由系统来赋予默认初始化值
数据类型[] 数组名 = new 数据类型[数组的长度];
格式举例:
int[] arr = new int[3];
格式解释:
数据类型[] 数组名 = new 数据类型[数组的长度];
左边
数据类型:规定了数组中能够存储的元素的数据类型
[]:说明定义的是一个数组类型
数组名:给数组取一个名字,方便使用
右边
new:是一个关键字,用于在内存中开辟一片内存空间,固定写法
数据类型:规定了数组中能够存储的元素的数据类型,和定义的时候的数据类型必须一模一样
[]:说明定义的是一个数组
数组的长度:规定了数组能够存储的元素的个数
数组中元素的默认初始值:
整数类型(byte、short、int、long) :0
浮点类型(float、double) :0.0
布尔类型(boolean) :false
字符类型(char) :'\u0000'
引用数据类型 :null
静态初始化:在初始化的时候,给定数组的元素,由系统计算数组的长度
标准格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,....};
举例:
int[] array = new int[]{10,20,30};
简化格式
数据类型[] 数组名 = {元素1,元素2,....};
举例:
int[] array = {10, 20, 30};
课堂练习:
(1)定义一个数组并初始化,数组类型是double类型,长度为5,其中的元素不确定 [动态初始化]
(2)定义一个数组并初始化,数组的类型是byte类型,长度为3,其中的元素为10,15,20 [静态初始化的标准格式]
(3)定义一个数组并初始化,数组的类型是String类型,长度为4,其中的元素为"hello","world","java","hehe" [静态初始化的简化格式]
数组的元素访问
取值
数据类型 变量名 = 数组名[索引];
赋值
数组名[索引] = 新值;
课堂练习:
定义一个数组并初始化,数组类型是double类型,长度为5,其中的元素不确定 [动态初始化]
(1)取出该数组中所有元素的值并打印在控制台
(2)给该数组中的索引为1和3的元素重新赋值
Java中的内存划分:
栈:方法要执行在栈区中要开辟空间,局部变量是方法中的变量,随着方法都在栈区
栈内存中的变量,一使用完立马消失
堆:一切new出来的东西,比如数组、对象
有地址值
堆内存中的东西用完不是立马消失,消失有时机(垃圾回收机制)
方法区
.class文件
本地方法栈:和操作系统相关
寄存器:和CPU相关
数组中的两个常见错误(异常)
数组索引越界异常
ArrayIndexOutOfBoundsException
产生的原因:
操作的索引超出了数组的索引范围:0~数组的长度-1
解决方式:
让操作的索引在数组的索引范围内
空指针异常
NullPointerException
产生的原因:
直接给数组类型的引用赋值为null,而没有new
还去使用它
解决方式:
给它补上new
练习
定义一个int[]数组,演示两种异常的发生。
获取数组的长度
length属性
int len = 数组名.length;
数组的常见操作
1、数组的遍历:将数组中的元素按顺序依次取出来
// 定义一个数组
int[] arr = {3,1,5,8,9};
// 遍历数组
for(int i=0;i<arr.length;i++){// i在0~arr.length-1之间变化
// i代表的就是索引值,每循环一次会依次增加1
System.out.println(arr[i]);
}
2、数组元素求和:将数组的元素的值加总起来
// 定义一个数组
int[] array = {9,10,-2,5,3};
// 求和变量
int sum = 0;
// 遍历求和
for (int i = 0; i < array.length; i++) {
// array[i]代表的就是每一个元素
sum += array[i];
}
// 打印求和的结果
System.out.println(sum);
3、数组元素求最值(最大值和最小值):求出数组中的元素的最大值或者最小值
// 定义一个数组
int[] array = {9,10,-2,5,3};
// 定义一个变量用于记录最大值
int max = array[0];
// 遍历比较,求出最大值
for(int i=1; i<array.length; i++){
if(array[i] > max){
max = array[i];
}
}
System.out.println("最大值为:"+max);
4、数组的反转:将数组中存储的元素倒过来 1 2 3 -> 3 2 1
5、数组元素查找:给定一个元素查找出该元素在数组中的索引位置
6、数组的元素排序:按照一定的顺序(从小到大或者从大到小)对元素进行排列 {3,1,5,8,9} ->{1,3,5,8,9}
冒泡排序
选择排序
练习:
(1)定义一个数组,元素值自己确定,然后对这个数组的元素进行遍历
(2)定义一个数组,元素值自己确定,然后将数组中的所有的元素值进行加总,最后打印出加总的结果
今日重点
(1)说出什么是数组,数组的特点
(2)能够使用动态初始化定义一个数组
(3)能够使用静态初始化(标准格式和简化格式)定义一个数组
(4)能够访问数组(取值和赋值)中的元素
(5)了解数组的内存图
(6)能够获取数组的长度,length属性
(7)数组常见操作一:能够遍历数组(正着和倒着)
(8)数组常见操作二:能够对数组的元素进行求和
(9)数组常见操作三:能够对数组求最值(最大值和最小值)
(10)数组常见操作四:能够对数组进行反转操作(思路一和思路二)
(11)了解数组作为方法的参数和返回值