一维数组内存分析及数组元素的创建和使用

2/10/2017来源:ASP.NET技巧人气:409

一、数组概述

    1. 数组可以看成是多个相同类型数据组合,对这些数据的统一管理。

    2. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

    3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型

二、一维数组的声明

    1.一维数组的声明方式: type var[ ] ;或 type[ ] var ;

    2.java语言中声明数组时不能指定其长度(数组中元素的个数),

         例如: int a[5] ;    非法

三、数组对象的创建

     Java中使用关键字new 创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数]

       例如:

public class Test {
	public static void main(String args[]) {
		s = new int[5];
		for (int i=0; i< 5; i++) {
			s[i] = I;
		}
	}
}

四、元素为引用类型的数组

元素为引用数据类型的数组中的每一个元素都需要实例化。

public class Test {
	public static void main(String args[]) {
		Date[] days;
		days = new Date[3];
		for (int i = 0; i < 3; i++) {
			days[i] = new Date(2004,4,i+1);
		}
	}
	
	class Date {
		int year;int month;int day;
		Date(int y,int m,int d) {
			year = y;
			month = m;
			day = d;
		}
	}
}

内存分析:

days

Date[] days声明数组时,由于未创建数组对象,栈内存中内容为NULL。

执行到days = new Date[3],栈中内容更新,指向堆中new出来的对象。堆中的内容也没有初始化,所以也是NULL

执行完for循环之后,days[0], days[1], days[2]分别都指向了一个新的对象

五、数组初始化

    1. 动态初始化

         数组定义与为数组分配空间和赋值的操作分开进行,先分配,后赋值。

             int a[ ] ;   //定义

             a = new int [3] ;  //分配空间

             a[0] = 3 ; a[1] = 9 ; a[2] = 8 ;   //赋值

    2. 静态初始化

         在定义数组的同时就为数组元素分配空间并赋值。例如:

              int a [ ] = {3,9,8};

            或

              Date days [ ] = {new Date(1,4,2004),

                                        new Date(2,4,2004),

                                        new Date(3,4,2004)

                                      }

     3. 数组元素的默认初始化

               数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间时,每个元素也按照成员变量的规则被隐式初始化。如,double 类型,默认 0.0;引用类型,默认NULL; 逻辑类型,默认 false。

六、数组元素的引用

      1. 定义并用运算符 new 为之分配空间后,才可以引用数组元素中的每个元素,数组元素的引用方式为:

                                                  arrayName[index]       2.  index为数组元素下标,可以是整型常量或整型表达式。如:a[3], b[i], c[6*i]  

      3.  数组元素下标从0开始;长度为n的数组的合法下标取值范围为 0~n-1

      4.  每个数组都有一个属性 length 指明它的长度。 a.length的值为数组a的长度(元素个数)

                     注意length后不要加括号,这里的length是一个属性,不是一个方法。与String区分开来。