Java数组
一、数组的基本概念
所谓的数组就是相同类型的元素按一定顺序排列的集合。在Java语言中数组元素可以由简单数组类型的量组成,也可以有对象组成。
注意的是:数组存放的元素的类型是相同的。用统一的数组名和一个下标来确定数组中元素。
数组的几个特点:
(1)、数组是相同数据类型的元素的集合。
(2)、数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起
(3)、数组元素用整个数组起的名字和它自己在数组中顺序位置来表示。例如,a[0]表示名字为a的数组中第一个元素,a[1]代表数组a的第二个元素,以此类推。
(4)、在堆内存中new创建空间时必须给数组指定长度,而且数组的长度不是动态改变的。下标越界是会报数组越界的运行异常的。
二、栈内存和堆内存
为了充分理解数组的概念,应该熟悉Java语言有关内存分配知识。内存分成两种:栈内存和堆内存。
在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为该变量所分配的内存空间。
堆内存是用来存放有new运算符创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收机制来管理。在堆中创建了一个数组或者对象后,同时还在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成为数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的地址(也成为句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组和对象。引用变量相当于是为数组或对象起的一个名称。引用变量是普通变量,定义时在栈中分配,引用变量在程序运行到其中作用域之外后释放。而数组或对象本身在堆内存中分配,即使程序运行到使用new运算符创建数组或对象的语句所在的代码之外数组或对象本身所占据的内存就会被释放,数组或对象在没有引用变量指向它时,会变为垃圾,不能再被使用时,但是仍然占据内存空间不放,在随后一个不确定的时间被垃圾回收机制收走(释放掉),这也是Java比较占内存的原因。
Java有一个特殊的引用型常量null,如果将一个引用变量赋值为null,则表示该引用变量不指向(引用)任何对象。
三、数组的定义
1、需要使用Java语言的数组,一般需要经过三个步骤:一是声明数组,二是创建空间,三是创建数组元素并赋值。
(1)、数组类型[] 数组名;//声明一堆数组、
(2)、数组名=new 数组类型[个数];
可以结合写成:数组类型[] 数组名 = new 数据类型[个数]; 如例子: int[] a = new int[10];
当进行第一步时:在某方法的栈内存中创建了一个名字为a的变量,然后new时,就会在该方法的堆内存中创建了一个长度为10的数组对象,并将数组对象赋给了数组引用变量x,并在栈内存中储存的地址指向堆内存中数组的首地址。
在堆内存中创建的数组对象也可以不指向任何一个引用变量,这是就会在栈内存中有null的变量被指向。
数组内的元素的数值就会,根据数组类型存相应的默认值。
四、数组的访问
数组的访问主要是通过数组的下标来进行对数组的取值。下标从0开始,通常会用length这个属性来表示数组的最大的一个下标。
遍历数组一般就会使用for循环,还有从jdk5后就有forean这个方法来方便快捷地遍历。
如: int[] a = {1,2,3,4,5};
for(int i =0;i<a.lengh;i++){
System.out.println(a[i]+" ");
}
foreach语句
for(int element : a){
System.out.println(element);
}