1. 概念:1>同时存放多个数据值;
2>特点:<1>数组本身是引用类型,而数组中的数据可以是基本类型,也可以是引用类型;
<2>数组中的类型必须一致;
<3>长度在程序运行时不能改变。
2. 动态初始化:指定长度,即在创建数组时,直接指定数组当中数据元素的个数。
1>格式:数据类型[] 数组名称 = new 数据类型[数组长度]; //数组长度是一个int类型
2> - int double float...string的数据类型是String;
- 可以拆分成两个步骤。
3.1>静态初始化:<1>指定内容,即创建数组时,不直接指定个数,而是直接指定数组内容。
<2>格式:数据类型[] 数组名称 = new 数据类型[ ]{元素1,元素2,...};
<3> - 静态初始化根据{ }内的内容,可以推断出数组的长度;
- 可以拆分成两个步骤:数据类型[] 数组名称;
数组名称 = new 数据类型[ ]{元素1,元素2,...};
2>省略的静态初始化:<1>数据类型[] 数组名称 = {元素1,元素2,...};
<2>不能拆分成两个步骤。
3>使用:当不确定数组具体内容时,用动态初始化;否则,用静态。
4. 获取数组元素:(用静态初始化)1>数组名称[索引值];//索引值(元素编号)是一个int,scope:0 - (len(array[])-1)
2>可以直接打印出数组内的元素,也可以将元素赋值给变量,打印相应的变量。
5. 给数组元素赋值:(用动态初始化)1>默认值:int 0;float 0.0;string \u0000;boolean false;引用类型 null;
2>array[0] = 123 ; //可以对动态初始化的数组赋值。
6. 内存划分:1>栈(Stack):存放方法中的局部变量(方法的参数,即方法{ }内的变量),方法一定在栈里运行;
2>堆(Heap):new出来的东西;都有地址值(16进制);都有默认值;堆里存放数据;
3>方法区(Method Area):存放class的信息,包含方法‘s信息,但方法的真正运行都在栈里;
4>本地方法栈(Method Area):与操作系统有关;
5>寄存器(PC Register):与CPU相关。
7. 数组的内存图:1>一个数组的内存图:
2>两个数组的内存图:两个数组互相不影响(二者地址不相同)。
3>两个引用指向同一个数组的内存图:运行完这段程序,再打印arrayA,array[1]和array[2]的值分别是100,200,因为int[] arrayB = arrayA;操作后,arrayA和arrayB相当于同一个数组(他们的地址相同)。
8.常见的问题:1>索引越界异常:index> len.array[ ] 会出现 ArrayIndexOutOfBoundsException;
2>空指针异常:数组必须new进行初始化,否则不能调用数组内的元素,会出现NullPointerException;
9. 获取数组长度:1>数组名称.length //int len = array[ ].length; 得到一个int数字,代表了array的长度;
2>数组长度不能在程序运行里面发生改变。
10.数组遍历输出:利用for loop通过对array的index进行处理,实现遍历。
11.求数组最值:利用for loop和if实现。
12.数组元素反转:1>对称位置的元素交换;2>用两个int min和max(大小是对索引的描述)做数组的索引;3>用第三个temp变量实现两个变量的交换;4>当min<max的时候可以进行交换;在min==max和min>max的时候停止交换。
13.传递地址:任何数据类型就可以作为方法的参数;调用方法的时候,向方法()进行传参,传递的是地址值。
14.返回地址:1>一个方法需要返回多个参数时,可以new一个数组;
2>数组作为方法的参数,传递进去的是数组的地址值;作为方法的返回值,返回的也是数组的地址值。