1、案例分析
现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有50名员工,用前面所学的知识,程序首先需要声明50个变量来分别记住每位员工的工资,然后在进行操作。这样做会显得很麻烦,而且错 误率也会很高。
因此:我们需要用一个容器,来存储大量的相同数据类型的数据,如上述的员工工资。
2、数组概念:
数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。
2.1 数组的定义(定义之后生成在栈内存中)
格式一:数组存储的数据类型[] 数组名字;
例如:int[] array;
解释:定义了一个int类型的数组,数组名叫array
格式二:数组存储的数据类型 数组名字[];
例如:int array[];
解释:定义了一个int类型的数组,数组名是array数组
2.2 数组的初始化
2.2.1 数组初始化概述
1、Java中的数组必须先初始化,然后才能使用,初始化就是给数组元素分配内存空间,为数组中的元素赋值。
2.2.2 初始化格式
1、动态初始化
格式一:数组存储的数据类型[] 数组名字 = new 数组类型[长度];
例如:int[] array = new int[2];//定义长度为2的数组
格式详细分析:
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[ ] : 表示数组。
数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
new:关键字,创建数组使用的关键字。
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[长度]:数组的长度,表示数组容器中可以存储多少个元素。
重点:数组有定长特性,长度一旦指定,不可更改。
注意:动态初始化,不同类型的数组的默认值不一样:
byte,short,int,long,数组的默认值为0 f
loat,double型的,数组默认值为0.0
char,数组的默认值为’\u0000’
boolean,数组的默认值为false
引用类型(类,接口,数组),数组的默认值为null
2、静态初始化
格式一:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};
例如:int[] array = new int[]{1,2,3};
格式二:数据类型[] 数组名 = {元素1,元素2,元素3…};
例如:int[] array = {1,2,3};
3、数组的访问
3.1 数组变量的访问方式
1、数组变量访问方式
格式:数组名
2、数组内部保存的数据的访问方式:
格式:数组名[索引]
索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
比如:体育课集合报数的时候,每一排左边第一名同学说1,然后右边一名同学说2…
注意:
1、索引是从0开始的
2、索引是连续的
3、索引是逐一增加的,每次增加1
4、不能操作数组最大索引(最大索引 = 数组长度 - 1)
数组长度 = 数组名.length
3.1.1 代码实例:
public class test {
public static void main(String[] args) {
int[] array01 = {
2, 3, 7, 2, 0};
//访问并输出数组array01
System.out.println(array01);// [I@1b6d3586 (是地址)
//访问并输出数组array01中的第一个元素
System.out.println(array01[0]);
//数组长度
System.out.println(array01.length);
}
}
4、java中的内存分配
4.1 java程序在运行时,需要在内存中分配空间,为了提高运算效率,就对内存空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
4.2 图解数组在内存中的分配
int[] array01 = new int[3];
System.out.println(array01);
System.out.println(array01[0]);
System.out.println(array01[1]);
System.out.println(array01[2]);
Ps:栈内存是存放基本类型的变量,对象的引用和方法调用;堆内存用于存放由new创建的对象和数组。
解释:
1、System.out.println(array01);输出 [I@1b6d3586
[I@1b6d3586就是001的内存地址
2、 System.out.println(array01[0]);
System.out.println(array01[1]);
System.out.println(array01[2]);
先在堆内存中找到地址001,然后找到对应的索引,最后输出索引对应的值
3、 栈内存:存储局部变量
4、 堆内存:存储new出来的内容(实体,对象),每一个new出来的东西都有一个地址,使用完毕,等待垃圾回收器回收。
4.3 局部变量
定义在方法中的变量,例如array01,使用完立即消失。
4.4、两个变量指向同一个地址
public class test {
public static void main(String[] args) {
// 定义数组,存储3个元素
int[] arr = new int[3];
//数组索引进行赋值
arr[0] =