第1课 数组与内存控制
Java 数组并不是什么很难的知识, 如果单从用法的角度来看, 数组的用法并不难, 只,很多程序员虽然一直使用 Java数组,但他们往往对Java数组的内存分配把握并不准确。本室正是为了弥补程序员的这部分基本功而做的深入探讨。
本课将会深入探讨Java 数组的静态特征。 使用 Java 数组之前必须先对数组对象进行初女化。 当数组的所有元素都被分配了合适的内存空间, 并指定了初始值时, 数组初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小。 从用法角度来看, 数组元素相兰于普通变量, 程序既可把数组元素的值赋给普通变量, 也可把普通变量的值赋给数组元素。本课还将深入分析多维数组的实质, 深入讲解多维数组和一维数组之间的关联, 并通逗程序示范如何将一维数组扩展成多维数组。
1.1 数组初始化
数组是大多数编程语言都提供的一种复合结构, 如果程序需要多个类型相同的变量时,就可以考虑定 义一个数组。 Java 语言的数组变量是引用类型的变量, 因此具有 Java 独有的特性
1.1.1 Java数组是静态的
Java 语言是典型的静态语言, 因此Java 的数组是静态的, 即当数组被初始化之后, 该数组的长度是不可变的。Java 程序中的数组必须经初始化才可使用。 所谓初始化, 就是为数组对象的元素分配内存空间, 并为每个数组元素指定初始值.
数组的初始化有以下两种方式。
静态初始 化: 初始化时由程序员显式 指定每个数组元素的初始值, 由系统决定数组长度
动态初始 化: 初始 化时程序员 只指定数组长度, 由系统为数组元素分配初始值.
不管采用哪种方式初始化 Java 数组,一旦初始化完成,该数组的长度就不可改变,Java语言允许通过数组的length属性来访问数组的长度。示例如下.
上面程序中的粗体字代码声明并初始化了 3个数组。 这3 个数组的长度将会始终不变,
程序输出3个数组的长度依次为4,3,5.前面已经指出,Java语言的数组变量是引用类型的变量,books,names,strArr这3个变量以及各自引用的数组在内存中的分配如图1.1所示。从图 1.1 中可以看出, 对于静态初始化方式而言, 程序员无需指定数组长度, 指定该数组的数组元素, 由系统来决定该数组的长度即可. 例如 books 数组, 为它指定了 4个数组元素,那它的长度就是4;对于names数组,为它指定了3个元素,那它的长度就是3。
执行动态初始化时,程序员只需指定数组的长度, 即为每个数组元素指定所需的内存空
间, 系统将负责为这些数组元素分配初始值, 指定初 始值时, 系统将按 如下规则分配初始值,
数组元素的类型是基本类型中的整数类型(byte,short,int和long),则数组元素的值是0.
数组元素的类型是基本类型中的浮点类型 (float, double), 则数组元素的值是0.0.
数组元素的类型是基本类型中的字符类型 (char), 则数组元素的值是"u0000'.
数组元素的类型是基本类型中的布尔类型 (boolean), 则数组元素的值是false.
数组元素的类型是引用类型 (类, 接口和数组), 则数组元素的值是null.
不要同时使用静态初始化和动态初始化, 也就是说, 不要在进行数组初始化时, 既指
定数组的长度, 也为每个数组元素分配初始值.