首页 >> 网络营销词典 >> 互联网基础知识FAQ >> java数组

java数组[编辑]


概述
数组是编程语言中最常见的一种数据结构,可以用于存储多个数据,每个数组元素存放一个数据,通常可以通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。

   Java数组的简介

      数组是编程语言中最常见的一种数据结构,可以用于存储多个数据,每个数组元素存放一个数据,通常可以通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。

java语言的数组具有特有的特征

     数组也是一种类型, java数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。

    一旦数组的初始化完成,数组在内存中所占的空间就被固定下来,因此数组的长度将不可改变。即使把某个数组元素清空,但它所占用的空间依然保留,依然属于该数组,数组的长度依然不变。

     java的数组既可以存储基本类型的数据,也可以存储引用类型的数据,只有所有的数组元素具有相同的类型即可。值得提出的是,数组也是一种数据类型,它本身是一种引用类型。例如,int是一个基本类型,但int[]就是一个引用类型。为了更好的语音及可读性,应该使用第一种定义语法。

   数组的定义

     java语言支持两种语法格式来定义数组
     type[] arrayName;
     type arryName[];

     为了更好的语音及可读性,应该使用第一种定义语法。因为第一种格式不但具有更好的语义,而且具有更好的可读性。对于type[] arrayName;方式,很容易理解定义了一个变量,其中变量名是arrayName,而变量的类型是type[]。
      数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量,这个引用变量还未指向任何有效内存,因此定义数组时不能指定数组长度。而且由于定义数组只是定义了一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有对数组进行初始化后才可以使用。

   数组的初始化

     java语言中数组必须先初始化,然后才可以使用。所谓初始化,就是为数组元素分配内存空间,并为每个数组元素赋初值。

    数组的初始化方式有两种:

    静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
    动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

    静态初始化语法如下:

    arrayName = new type[]{element1, element2, …}

    示例:String[] strs = new String[]{};

    此外,还有一种简化语法,使用数组常量,如下:

     arrayName = {element1, element2, …}

    示例:int[] ints = {1, 2, 3,};
    数组初始化列表的最后一个逗号都是可选的,这一特性使维护长列表变得更容易。

    动态初始化语法如下:

    arrayName = new type[length];

    示例:double[] ds = new double[0];

    动态初始化涉及数组中每个元素的自动初始化问题。当系统为每个元素分配内存空间时,其实是通过将内存空间所    有二进制位设为0,以达到分配初始值的目的的。

    多维数组

      二维数组允许如下的初始化语法:
      arrName = new type[length][]
      这相当于定义了length个type[]类型的变量,并且此时这些变量都是null。
      更一般的,对于更高维的数组,允许仅指定至少最高维的前任意维的维度,如下:
 = new type[length1]…[]…
这导致低维数组元素都是null,所以后续需要对低维数组进行进一步初始化。对低维数组的初始化其实就是数组元素赋值而非定义赋值,所以对于数组常量的赋值方式将不适用。即以下赋值语句将导致编译错误:
intss[1] = {1, 2};

当我们说数组时,一般隐含“一维”这个“默认”前缀,并形象地把其看作一个线性列表;二维数组,我们又赋予矩阵一般的形象,这是“面性”的;三维数组被认为是“体性”的……再高维度的数组似乎就很难形象化了,这使得感观上很难认知。
实质上,Java里的数组可以说只有一维的。
我们先从最简单的多维数组——二维数组来看。一般地,二维数组type[][],该类型的数组变量是一个引用,这个引用指向真实的数组内存对象。此时数组元素类型为type[],也是引用,这个引用指向一维数组内存对象,其元素为type类型。
从这里我们隐隐可以看到递归结构的影子,通过观察更高维数组,这种递归结构很容易归纳出来。对于任意高维数组而言,其本质是一个元素类型为比其低一维的数组组成的一维数组。例如:type[][][][]数组,是一个元素类型为type[][][]的一维数组,type[][][]数组又是一个元素类型为type[][]的一维数组……这样,我们发现,所有数组都是一维的,数组的类型去掉一个[]就是元素类型。

   参差数组

      由于定义多维数组时,不必定义低维数组的长度,所以这使得多维数组拥有成为“参差数组”的能力,即同一维度下的数组元素中的数组的长度可以是不同的。如下:
     int[][] intss = new int[2][];
     intss[0] = new int[]{1, 2};
     intss[1] = new int[3];
     intss是一个二维数组,它有2个元素,都是一维数组,而这2个一维数组,一个长度为2,另一个长度为3。这对于多维数组是允许的。

     数组的类型

有的书上说,数组不是一个类,因为无法说出数组的类名。这种说法的准确性是值得商榷的。
首先,每个数组都是有类型的,这一点我们可以透过任意数组都有getClass()方法这点得知。
其次,并非我们不能说出数组的类名,只是盛装不同类型元素的数组其类型是不同的。
所以,数组的确不是一个类,因为它是许多类的一个统称,只是这些类都有相同的集合形式。
下面例举一些数组的类型:
数组             类型(类名)
byte[]          [B
short[]         [S
int[]             [I
long[]          [J
float[]          [F
double[]       [D
char[]          [C
boolean[]     [Z
String[]        [Ljava.lang.String;
int[][]          [[I
     可以看出,无论什么类型的数组,其类名都是以“[”为前导符的,并且是多少维的数组就会有多少个前导符。另外,对于基本类型的数组而言,其类名都是前导符加上一个特征大写字母组成;而对于常规类型的数组而言,其类名是其元素类型完全限定名加上“L”字母前缀并再加前导符组成。

 

 

 

 

 

 

 

 

参考资料:
扩展阅读:
相关词条:
合作编辑:

网络营销词典内容均由网友提供,仅供参考。如发现词条内容有问题,请发邮件至info # wm23.com。

词条信息

浏览次数:13

编辑次数:0历史版本

创建者: 王林杰

最近更新:2015/11/24 14:46:40

词条分类导航

关于网络营销教学网站| 本站动态| 网站地图| 版权声明| 联系作者| 问题和建议|

版权声明:网络营销教学网站所有作品版权均归原作者所有,未经书面许可,严禁任何形式的转载/转贴、出版、篡改、汇编、编译等。