数组
Java数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数据元素的类型是统一的,即一个数组里只能存储一种数据类型的元素,而不能存储多种数据类型的数据。
一旦数组的初始化完成,数组在内存中所占据的空间将被固定下来,因此数组的长度将不可改变。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
定义数组
Java语言支持两种语法格式来定义数组:
type[] arrayName; 推荐使用这种方法
type arrayName[];
数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存,因此定义数组时不能指定数组的长度。而且由于定义数组只是定义了一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数据元素,因此这个数组也不能使用,只有对数组进行初始化后才可以使用。
数组的初始化
Java语言中数组必须先初始化,然后才可以使用。所谓初始化,就是为数组的数据元素分配内存空间,并为每个数组元素赋初始值。
数组的初始化有如下两种方式。
静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:初始化时程序员只指定数组长度,有系统为数组元素分配初始值。
1 静态初始化
静态初始化的语法格式如下:
arrayName =new type [] {element1,element2,element3,……}
例:int[] intArr;
intArr = new int [] {5,6,7,8};
静态初始化的简约语法格式:
type [] arrayName =new type [] {element1,element2,element3,……}
例:
int [] a={5,6,7,8};
2 动态初始化
动态初始化只指定数组的长度,由系统为每个数组元素指定初始值。动态初始化的语法格式如下:
arrayName = new type [length];
例:int [] price = new int [5];
执行动态初始化时,程序员只需指定数组的长度,即为每个数组元素指定所需的内存空间,系统将负责为这些数组元素分配初始值。指定初始值是,系统按如下规则分配初始值。
数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0;
数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0;
数组元素的类型是基本类型中的字符类型(char),则数组元素的值是‘\u0000’;
数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false;
数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。
3 内存中的数组
数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。
与所有引用变量相同的是,引用变量是访问真实对象的根本方式。也就是说,如果希望在程序中访问数组对象本身,则只能通过这个数组的引用变量来访问它。
实际的数组对象被存储在堆内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中。
牢记,内存分配:
定义并初始化一个数组后,在内存中分配了两个内存空间,一个用于存放数组的引用变量,另一个用于存放数组本身。
当程序员定义并初始化了a、b两个数组后,系统内存中实际上产生了4块内存区,其中栈内存中有两个引用变量:a和b;堆内存中也有两块内存区,分别用于存储a和b引用所指向的数组本身。
4 二维数组
二维数组的初始化 type [] [] arrName = new type [length] [];
二维数组初始化的时候,第一个下标必须给定。
浙公网安备 33010602011771号