JAVA学习笔记——数组
软件版本:
java version "1.7.0_05"
eclipse
目录:
1. 声明数组
2. 实例化数组
3. 初始化数组
4. 二维数组
5. length 属性
6. foreach 循环
7. 参考资料
1. 声明数组
JAVA 支持两种格式声明数组:
type[] ArrayName;
type ArrayName[]; // 不推存这样子写
要注意的是,声明后的数组还不能使用。它只声明变量 ArrayName 为 type 类型的数组,并没有指向任何有效内存空间(相当于指针),所以不能使用。在定义的过程中,也不可以在方括号内指定数组的长度。
数组的长度是在数组实例化或者数组初始化的过程中确定下来的,只有被实例化或者初始化后的数组才能够使用。
2. 实例化数组
所谓的实例化,其实就是为数组在堆中分配内存空间。格式为:
1)
type[] ArrayName; // 声明数组
ArrayName = new type[length]; // 实例化数组,为数组分配内存
2)
type[] ArrayName = new type[length]; // 声明并实例化数组
3. 初始化数组
初始化数组其实不但将数组实例化,而且还赋予了数组初始值。格式为:
1)
type[] ArrayName; // 声明数组
ArrayName = new type[]{element1, element2, element3,...}; // 初始话数组
2)
type[] ArrayName = {element1, element2, element3,...}; // 定义并初始化数组·········(1)
要注意的是,下面这样子初始化是不行的。
type[] ArrayName; // 定义(声明)数组
ArrayName = {element1, element2, element3,...}; // 注意与(1)的区别
既指定长度,又进行赋值,也是不行的:
1)
type[] ArrayName; // 声明数组
ArrayName = new type[length]{element1, element2, element3, ...}; // 初始话数组
2)
type[] ArrayName = new type[length]{element1, element2, element3, ...}; // 定义并初始化数组
4. 二维数组
可以这样子理解二维数组,就是建立一个数组用来存储多个不同长度的一维数组。对于 n 维数组可以理解为,建立一个数组,储存多个不同长度的 n-1 维数组。二维数组的声明方法:
type[][] ArrayName;
type ArrayName[][]; // 还是不推荐这样子写
type[] ArrayName[]; // 这么怪的写法也支持
实例化:
1)
type[][] ArrayName = new type[length1][length2]; // 声明并实例化
2)
type[][] ArrayName = new type[length1][]; // 只实例化第一级数组是可以的,但是不能只实例化第二级数组
ArrayName[num1] = new type[length2]; // 实例化第二级数组
ArrayName[num2] = new type[length3]; // 他们的长度可以不一样
初始化:
type[][] ArrayName = new type[][]{{elements1...}, {elements2...}, {elements2...}, ...};
type[][] ArrayName = {{elements1...}, {elements2...}, {elements2...}, ...}; // 也可以这样子
就这样子看起来有点复杂,弄个例子容易明白点。
int[][] numbers = new int[][]{{2, 3}, {5, 10}, {20, 30}}; String[][] str = new String[][]{new String[3], new String[]{"hello"}};
5. length 属性
在 JAVA 中所有的数组都提供一个 length 属性,表示数组的长度。我们可以通过它来遍历整个数组。
for(int i = 0; i < ArrayName.length; i++) { System.out.println(ArrayName[i]); }
你猜一下,如果 ArrayName 是一个二维数组将会怎么样?将会输出第一级数组的长度。
6. foreach 循环
foreach 循环,用来循环遍历数组和集合会更加简洁。格式:
for(type variableName : ArrayName | collection)
{
// 每一次循环 variableName 都将获取 ArrayName 中的一个元素,直到最后一个跳出循环。
}
例子:
1 public class test { 2 public static void main(String[] args) { 3 4 int[][] numbers = new int[][]{{2, 3}, {20, 30, 40}, {200, 300}, {2000, 3000}}; 5 6 for(int i[] : numbers) 7 { 8 for(int j : i) 9 { 10 System.out.println(j); 11 } 12 } 13 } 14 }
由于 numbers 是一个二维数组,所以第 6 行的 i 是一个一维数组。这样子 i 才能指向每一个 nembers 的第一级数组。
7. 参考资料
[1]. 《疯狂JAVA讲义》李刚
[2]. http://android.yaohuiji.com/archives/3379