马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 零度非安全 于 2017-1-22 15:36 编辑
【Java 教程(原创)】索引帖
数组是相同类型的变量按顺序组成的一种复合数据类型,这些相同类型的变量称为数组的元素或单元。数组通过数组名加索引来使用数组的元素,索引从 0 开始。
1>数组的声明
声明数组包括声明数组的名字、数组元素的数据类型。
声明一维数组有下列两种格式:数组的元素类型 数组名字[];
数组的元素类型[] 数组名字;
声明二维数组有下列两种格式:数组的元素类型 数组名字[][];
数组的元素类型[][] 数组名字;
例如:float boy[];
char cat[][];
那么数组 boy 的元素可以存放 float 型数据,数组 cat 的元素可以存放 char 型数据。
数组的元素类型可以是 Java 中的任一种类型。假如已经声明一种 People 类型数据,那么可以如下声明一个数组:将来数组 china 的元素可以存放 People 类型的数据。
注:与 C/C++ 不同,Java 不允许在声明数组中的方括号内指定数组元素的个数。若声明:或将导致语法错误。
2>数组的创建
声明数组仅仅是给出了数组名字和元素的数据类型,要想真正使用数组还必须为它分配内存空间,即创建数组。
为数组分配内存空间的格式如下:数组名字 = new 数组元素的类型[数组元素的个数];
例如:为数组分配内存空间后,数组boy获得 4 个用来存放 float 类型数据的内存空间,即 4 个 float 型元素。数组变量 boy 中存放着这些内存单元的首地址,该地址称为数组的引用,这样数组就可以通过索引操作这些内存单元。数组属于引用型变量,数组变量中存放着数组的首元素地址,通过数组名加索引使用数组的元素,例如:boy[0] = 12;
boy[1] = 23.901F;
boy[2] = 100;
boy[3] = 10.23f;
内存分配示意图如下:
声明数组和创建数组可以一起完成,例如:float boy[] = new float[4];
二维数组和一维数组一样,在声明之后必须用 new 运算符分配内存空间,例如:int mytwo[][];
mytwo = new int[3][4];
或int mytwo[][] = new int[3][4];
Java采用“数组的数组”声明多维数组,一个二维数组是由若干个一维数组构成的。例如:上述创建的二维数组 mytwo 就是由 3 个长度为 4 的一维数组 mytwo[0]、mytwo[1] 和 mytwo[2] 构成的。
构成二维数组的一维数组不必有相同的长度,在创建二维数组时可以分别指定构成该二维数组的一维数组的长度,例如:int a[][] = new int[3][];
创建了一个二维数组 a,a 由3个一维数组 a[0]、a[1] 和 a[2]构成,但它们的长度还没有确定,即这些一维数组还没有分配内存空间,所以二维数组 a 还不能使用,必须创建它的3个一维数组。例如:a[0] = new int[6];
a[1] = new int[12];
a[2] = new int[8];
注:和 C 语言不同的是,Java允许使用 int 型变量的值指定数组元素的个数。例如:int size = 30;
double number[] = new double[size];
3> 数组元素的使用
一维数组通过索引符访问自己的元素,如 boy[0]、boy[1]等。需要注意的是,索引从 0 开始,因此,数组若有 7 个元素,那么索引到 6 为止。如果程序使用了如下语句:程序可以编译通过,但运行时将发生 ArrayIndexOutOfBoundsException 异常,因此,用户在使用数组时必须谨慎,防止索引越界。
二维数组也通过索引符访问自己的元素,如 a[0][1]、a[1][2] 等。需要注意的是,索引从 0 开始,例如声明创建了一个二维数组 a:int a[][] = new int[2][3];
那么第一个索引的变化范围是从 0 到 1,第二个索引的变化范围从 0 到 2。
4> length的使用
数组的元素的个数称为数组的长度。对于一维数组,“数组名字.length”的值就是数组中元素的个数;对于二维数组,“数组名字.length”的值是它含有的一维数组的个数。例如,对于:float a[] = new float[12];
int b[][] = new int[3][6];
a.length 的值是 12,b.length 的值是3。
5> 数组的初始化
创建数组后,系统会给每个数组元素一个默认的值,例如,float 型是 0.0。
在声明数组的同时也可以给数组的元素一个初始值,例如: float boy[] = {21.3f,23.89f,2.0f,23f,778.98f};
上述语句相当于:float boy[] = new float[5];
然后:boy[0] = 21.3f;boy[1] = 23.89f;boy[2] = 2.0f;boy[3] = 23f;boy[4] = 778.98f;
也可以直接用若干个一维数组初始化一个二维数组,这些一维数组的长度不尽相同,例如:int a[][] = {{1},{1,1,},{1,2,1},{1,3,3,1},{1,4,6,4,1}};
6> 数组的引用
相信大多数鱼油已经知道,数组属于引用型变量,因此,两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素。例如,对于:int a[] = {1,2,3},b[] = {4,5};
数组 a 和 b 中分别存放着引用 0x35ce36 和 0x757aef,内存模型如下图所示:
如果使用了下列赋值语句(a 和 b 的类型必须相同):那么,a 中存放的引用和 b 的相同,这时系统将释放最初分配给数组 a 的元素,使得 a 的元素和 b 的元素相同,a 、b 的内存模型变成如下图所示:
下面的例子使用了数组,运行效果如下图所示:
例子代码如下:
simpleArrayUse.javapublic class simpleArrayUse{
public static void main(String args[]){
int a[] = {1,2,3,4};
int b[] = {100,200,300};
System.out.println("数组a的元素个数 = " + a.length);
System.out.println("数组b的元素个数 = " + b.length);
System.out.println("数组a的引用 = " + a);
System.out.println("数组b的引用 = " + b);
System.out.println("a == b 的结果是" + (a == b));
a = b;
System.out.println("数组a的元素个数 = " + a.length);
System.out.println("数组b的元素个数 = " + b.length);
System.out.println("数组a的引用 = " + a);
System.out.println("数组b的引用 = " + b);
System.out.println("a == b 的结果是" + (a == b));
System.out.println("a[0] = " + a[0] + ",a[1] = " + a[1] + ",a[2] = " + a[2]);
System.out.print("b[0] = " + b[0] + ",b[1] = " + b[1] + ",b[2] = " + b[2]);
}
}
需要注意的是,对于 char 型数组 a,System.out.println(a) 不会输出数组 a 的引用,而是输出数组 a 的所有元素的值。例如,对于:char a[] = {'A','你','好','呀'};
System.out.println(a) 的输出结果是:如果想输出 char 型数组的引用,必须让数组 a 和字符串做并置运算。例如:System.out.println("" + a);
其输出结果是数组的引用。
在数组的下集中会讲下Java数组的复制。
【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。
|