数组
数组的定义:
- 相同类型的有序集合
- 按照一定的先后次序排列而成
- 每一个数组元素通过下标来访问他们
注意:
- 长度是确定的,一旦被创建,它的大小就是不可变的,即长度不变
- 数组元素的数据类型相同,不允许出现混合类型,可以是java中的任何数据类型,包括基本数据类型和引用类型
- .数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组 本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象 本身是在堆中的。
数组的声明和创建
声明数组
首先必须声明数组变量,才能使用数组。
dataType[] arrayRefVar; //首选的方法
dataType arrayRefVar[]; //效果相同,但不是首选方法
建议使用 **dataType[] arrayRefVar **的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言
double[] myList; //首选的方法
double myList[]; //效果相同,但不是首选方法
创建数组
Java语言使用new操作符来创建数组,语法如下:
arrayRefVar = new dataType[arraySize];
上面的语句完成了两个功能:
- 使用dataType[arraySize]创建了一个数组
- 把新创建的数组的引用赋值给变量arrayRefVar.
数组变量的声明,和创建数组可以用一条语句完成
dataType[] arrayRefVar = new dataType[arraySize];
数组的元素是通过索引访问的。数组的索引从0开始,所以索引值从0到arrayRefVar.length-1(数组长度-1)
获取数组长度:
array.length
[演示]
public class item{
public static void main(String[] args){
int[] myList = new int[10]; //数组的声明和创建
int total = 0; //求和变量初始化
for(int i=0;i<myList.length;i++){ //数组赋值初始化
myList[i]=i*i;
}
for(int i=0;i<myList.length;i++){ //访问数组,并求和
total += myList[i];
}
System.out.println("total is "+total); //输出结果
}
}
java内存分析
- 堆
- 存放new的对象和数组
- 可以被所有线程共享,不会存放别的对象引用
- 栈
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里面的具体地址)
- 方法区
- 可以被所有线程共享
- 包含了所有的class和static变量
注意:
- 声明的时候并没有实例化对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。因此,声明数组时不能指定其长度(数组中元素的个数),列如:int nums[5];//非法的
- 声明一个数组时并没有数组被真正的创建
- 构造一个数组,必须指定长度,数组被真正的创建,才会在堆中开辟数组需要的空间
数组的初始化
静态初始化
除了用new关键字来产生数组,还可以直接在定义数组的同时就为数组元素分配空间并赋初始值
int[] nums = {198,168,888}; //数组初始化并赋值
动态初始化
数组的定义、创建数组,赋值的操作,分开进行。
int[] nums;
nums = new int[2];
a[0]=168;
a[1]=198;
数组的默认初始化
int [] nums = new int[2]; //数组的元素值这里被默认初始化为0,各种类型数据的初始化不同,这里可以参考前面的数据类型一章