23、数组及其内存管理

来源:互联网 发布:淘宝刷访客软件 编辑:程序博客网 时间:2024/06/09 19:51
1、数组初始化

        Java语言的数组变量是引用类型的变量,Java语言是典型的静态语言,当数组被初始化后,该数组所占的内存空间、数组长度都是不可变以的。Java程序中数组必须经过初始化才可使用。数组初始化有两种方式,分别为:静态初始化和动态初始化。两种方式不能同时使用。

(1) 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。

String[] str = new String[]{"data0","data1","data2",};
(2) 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

String[] str = new String[3];
        系统为数组元素分配初始值时,规则如下:

(a) 数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0。

(b) 数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0。

(c) 数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0000'。

(d) 数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false。

(e) 数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。

        Java程序中的引用变量并不需要经过所谓的初始化操作,需要进行初始化的是引用变量所引用(指向)的对象,引用变量在声明的时候就已经在栈内存中创建,而引用变量所引用的对象是在初始化(new)时在堆内存中创建的。对数组执行初始化,其实并不是对数组变量执行初始化,而是在堆内存中创建数组对象,也就是为该数组对象分配一块连续的内存空间,这块连续的内存空间的长度就是数组的长度。

        Java的局部变量必须由程序员赋初始值,当定义了局部变量的数组变量,程序必须对局部的数据变量进行赋值,即使将它赋为null也行。

        所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量。都是存储在各自的方法栈内存中;但引用类型的变量所引用(指向)的对象(包括数组、普通的Java对象)则总是存储在堆内存中。

        引用变量本质上只是一个指针,只要程序通过引用变量访问属性,或者通过引用变量来调用方法,该引用变量就会由它所引用的对象代替。


2、数组应用
        Java语言不允许直接访问堆内存中的数据,因此无法直接访问堆内存中的数据对象,只能通过数组引用变量来访问数组。

多维数组:从某种意义上来讲,没有多维数组。

        可以把N维数组当成数组元素是N-1维数组的一维数组。

        Java允许将多维数组当成一维数组处理。初始化多维数组时可以先只初始化最左边的维数,此时该数组的每个元素都相当于一个数组引用变量,这些数组元素还需要进一步初始化。



0 0