首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

12.6  数组初始值设定项

数组初始值设定项可以在域声明(参见10.4节)、局部变量声明(参见8.5.1小节)和数组创建表达式(参见7.5.10小节)中指定:

array-initializer:

    {  variable-initializer-listopt  }

    {  variable-initializer-list  ,  }

variable-initializer-list:

    variable-initializer

    variable-initializer-list  ,  variable-initializer

variable-initializer:

    expression

    array-initializer

数组初始值设定项由一系列变量初始值设定项组成,这些变量初始值设定项括在标记“{”和“}”中并且由标记“,”分隔。每个变量初始值设定项都是一个表达式或一个嵌套的数组初始值设定项(在多维数组的情况下)。

在其中使用数组初始值设定项的上下文决定了正在初始化的数组的类型。在数组创建表达式中,初始值设定项之前就是数组类型。在域或变量声明中,数组类型是所声明的域或变量的类型。当在域或变量声明中使用数组初始值设定项时,例如:

int[] a = {0, 2, 4, 6, 8};

是如下等效数组创建表达式的简写形式:

int[] a = new int[] {0, 2, 4, 6, 8};

对于一维数组,数组初始值设定项必须由一个表达式序列组成,这些表达式是与数组的元素类型相兼容的赋值表达式。这些表达式将从索引为零的元素开始,按照升序初始化数组元素。数组初始值设定项中所包含的表达式的个数决定了正在创建的数组实例的长度。例如,上面的数组初始值设定项将创建一个长度为5的int[]实例,然后使用下列值初始化该实例:

a[0] = 0; a[1] = 2; a[2] = 4; a[3] = 6; a[4] = 8;

对于多维数组,数组初始值设定项必须具有与数组维数相同的嵌套级别。最外面的嵌套级别对应于最左边的维度,而最里面的嵌套级别对应于最右边的维度。数组各维度的长度由数组初始值设定项中相应嵌套级别内的元素的个数决定。对于每个嵌套的数组初始值设定项,元素的个数必须与同一级别的其他数组初始值设定项所包含的元素个数相同。示例:

int[,] b = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}};

将创建一个二维数组,其最左边维度的长度为5,最右边维度的长度为2:

int[,] b = new int[5, 2];

然后使用以下值初始化该数组实例:

b[0, 0] = 0; b[0, 1] = 1;

b[1, 0] = 2; b[1, 1] = 3;

b[2, 0] = 4; b[2, 1] = 5;

b[3, 0] = 6; b[3, 1] = 7;

b[4, 0] = 8; b[4, 1] = 9;

当数组创建表达式同时包含显式维度长度和一个数组初始值设定项时,维度的长度必须是常量表达式,并且各嵌套级别的元素个数必须与相应的维度长度匹配。以下是几个示例:

int i = 3;

int[] x = new int[3] {0, 1, 2};          //正确

int[] y = new int[i] {0, 1, 2};          //错误,i不是常量

int[] z = new int[3] {0, 1, 2, 3};   //错误,维度长度和初始值设定项不匹配

这里,y的初始值设定项将导致编译时错误,因为维度长度表达式不是常量;而z的初始值设定项也将导致编译时错误,因为其初始值设定项中所设定的长度与元素个数不一致。