数组的创建以及初始化:数组的长度一旦定义后就是固定的!数组定长!
1.静态初始化:定义数组时,随即将每个元素的值也初始化好。
语法:数据类型[ ] 数组名称 = {元素值1,元素值2,元素值3.......元素值n};
int [] num1 = {1,3,5,7,9};
2.动态初始化:定义数组时,不给元素具体赋值,定义之后再赋值,数组中每个元素都是其数据类型的默认值。
语法:数据类型[ ] 数组名称 = new 数据类型[数组长度];
int [] num2 = new int [5]; //此时num2的长度为5,其中每个元素都是int的默认值0。
数组的基本使用
数组中元素的访问
由于数组在内存中是一块连续的内存空间,且每个数组元素都有编号,第一个元素的编号为0,程序只需要记录第一个元素的地址(数组的首元素地址)即可,无需保存每个元素的内存地址,这也是数组的随机访问特性,可以立即取得数组中的任何一个元素。
为什么数组的首元素下标为0?
元素的编号称为数组的偏移量,也就是数组下标。假设这里有一个数组
int [] num1 = {1,3,5,7,9}; 那么第四个元素的地址 = 首元素地址 + 3* 数据类型大小
数组下标其实就是该数组元素相对于第一个元素的偏移量,即相对于第一个元素的距离单位。
首元素相对于自己的距离(偏移量)是0,这就是为什么数组首元素的下标为0。
我们访问数组中任意一个元素,只需要根据数组名称+下标即可取得!但要注意下标的合法性问题!(下标值不能超过总元素个数-1),数组下标越界问题。
通过数组名称.length属性取得数组的长度!然后根据数组长度遍历数组的每一个元素。
常规 for循环:在这个循环中,我们可以通过普通的for循环取得数组中任何一个元素并修改
for each循环:若只取得数组元素,并不修改,用for-each循环来遍历
在这个循环中的i不再是下标而是局部变量,依次将数组中的每一个元素值拷贝一份赋给i打印,所以无法进行修改。
数组是引用数据类型
引用数据类型:数组、类、接口。
所有的引用数据类型的变量,保存的都是一块堆内存地址,所谓的引用只不过是给对象起了一个别名而已。