Java学习第四章:数组
4.1一维数组
数组是相同类型的数据按照顺序组合后的一种引用类型。数组可以看成是多个相同类型数据的组合,实现对这些数据的统一管理。数组的长度一旦确定后就不能更改,因此它是一个固定长度的结构。数组结构中每个存储的数据叫数组元素,数组元素由索引来定位。索引(或叫数组下标)是指当前元素相对于第一个元素的位移,因此第一个元素的下标就是0,第二个元素的下标就是1,以此类推。
4.1.1数组的定义
我们用方括号“[]”来区分普通变量和数组变量。见下面声明整型数组的例子:
int[] numbers;
上面的语句声明了一个数组numbers,它的元素都是整型的,但是现在并没有确定数组的长度,也就是说没有确定numbers里有多少个元素。
提示: 方括号“[]”既可以放在数据类型的后面,也可以放在数组名的后面,两者都可以标识一个数组的声明,但是第一种写法可读性更好些。
例如:
char[] c;
String strs[];
数组声明后,Java虚拟机就会给数组分配存储空间,情况如下图4.1所示。
4.1.2数组的创建
数组的长度在创建时指定,并且一旦指定就不能更改。创建数组有两种方式:
1.静态初始化
这种方式在声明的同时就直接初始化数组,同时也创建了数组空间。如:
int[] m = {3,75,234,41,16};
上面的语句运行后,就会创建一个数组m,这个数组的长度是5,他有5个元素,分别是3,75,234,41,16。
2.动态初始化
这·种方式只是按照指定的长度来创建数组空间,但是数组里的元素将初始化为缺省值(对字符来说,为’\u0000’),例如:
numbers = new int[6];
上面的语句运行后,会创建一个数组numbers,这个数组的长度是6,但是值都是0,使用这个数组前还需要进一步的赋值使之有效。
这种创建方式的语法是:
数组名 = new 数组类型[数组长度];
如:
char[] c = new char[128];
String[] strs = new String[10];
double[] incoming = new double[73];
4.1.3数组的内存模型
数组是存储多个相同类型数据的对象。数组的所有元素保存在堆内存中。
创建一个数组就是在堆中创建一个数组对象。数组创建后立即拥有默认值。索引从0开始。连续分配
例如:
int[ ] array ;
array = new int [4] ;
4.1.4数组的初始化
数组的元素通过下标来标识,下标表示当前元素相对于第一个元素的位移,因此从0开始。比如name[0]就表示name数组的第1个元素,name[4]就表示name数组的第5个元素。其中方括号“[]”中的整数就是下标(又叫索引),要注意下标的范围从0~数组长度-1,如果访问超过范围的下标,就会发生ArrayIndexOutOfBoundsException下标越界异常。
数组类型 数组名[ ] = {
元素1,元素2,…}
或者
数组类型 数组名[ ] = new 数据类型[ ]{
元素1,元素2,…}
数组的初始化的两种方式如下:
例4.1 创建数组并初始化。
class Array_sample1 {
public static void main(String args[]){
int a[];
a = new int[5];
for(int i=1;i<5;i++){
a[i-1] = i;
}
}
}
赋值后数组元素的值分别是1,2,3,4,5。
4.1.5数组的访问
数组元素的访问需要根据数组名和下标共同实现,格式如下图所示。
数组名[元素下标] = 元素值;
例4.2 数组元素的访问。
public class Array_sample2 {
public static void main(String args[]){
int num1[] = new int[5];
num1[0] = 32; //每个元素单独初始化
num1[1] = 543;
num1[2] = 17;
num1[3] = 8;
num1[4] = 95;
int num2[] = new int[10];
for(int i=0;i<10;i++){
//采用循环方式初始化
num2[i] = i+1;
}
System.out.println