数组
问题引入
需求:计算一个班级100人的考试总分;
- 数组的概念
数组,就是一种容器,它可以保存多个相同类型的数据;而且数组一旦创建,容量不能更改
数组的定义格式
数组使用[] 表示;定义格式是:
数据类型[] 数组名(变量名) = new 数据类型[数组的容量];
int arr[] = new int[10];
int []arr = new int[10];
- 数组的使用
数组元素的存取&数组的索引
结论:
- Java中,数组都具有索引,索引实际上就是数组中每个存储单元的编号;
- 向数组中保存数据和取出数据,都是通过索引进行的;
- 索引的特点是:
- 从0开始,依次递增;最大索引就是数组容量减一;
数组的遍历&数组的length属性
在每个数组中,都有一个length属性,表示数组的容量;
使用方式是:
数组名.length;
注意:因为数组一旦创建,容量就固定不变,所以数组的length属性也不能改变;
如果对数组的操作(赋值或者取值)没有规律,那么就不能使用循环来简化;
数组的内存原理(了解)
- java的内存组成
- 数组的内存图解
需求1:画出下面代码执行的内存图解:
public
- 内存图解:
需求2:下面的代码执行结果是什么?为什么?
public
结论:
如果一个变量中保存的是实际数据本身, 这个变量就是基本类型变量;
如果一个变量是引用类型的变量,变量空间中保存的就一定是一个内存地址(或者是默认值null)
引用传递和值传递
如果是引用类型的变量,那么在变量中保存的是堆内存中的空间地址;
如果是引用类型的变量进行赋值,实际传递的是保存在变量中的地址,像这种传递数据的方式就叫做引用传递(传递的是内存地址);
如果是基本类型的变量进行赋值,实际传递的是保存在变量中的常量值,叫做按值传递;
因为值传递传递的是实际数据,所以不同的基本类型的变量的修改,相互之间没有影响;
应为引用传递传递的是堆内存中的引用地址,所以如果不同的变量保存的是相同的引用地址,那么他们都指向同一块空间;任何一个变量对空间的修改,都已影响其他变量;
数组使用中的常见问题
NullPointerException
ArrayIndexOutOfBoundsException
当试图使用不存在的下标(超出范围的下标)来操作数组的时候,就会出现这个问题;
数组的第二种定义格式
- 数组定义格式:
数据类型[] 数组名 = new 数据类型[数组容量];
数组名[索引] = 数据;
如果在定义数组时已经知道数组中会保存什么数据,就可以使用另一种定义方式,在创建数组的同时将数据保存在数组中;
格式:
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3,数据4……数据n};
注意:使用这种方式,不能在中括号中写数组的容量;
这种定义格式的简写形式:
数据类型[] 数组名 = {数据1,数据2,数据3,数据4……数据n};
注意:简写只是为了书写方便,实际上编译器还是会加上new 这一部分;
注意:使用简写形式时,不能将数组变量的声明和赋值写成两行;
数组的练习
- 数组平均值:
例子:求下列数字的平均值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10
- 数组求最大值
例子:求下列数字的最大值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10