【Java基础汇总】数组

数组的定义

Java语言支持两种语法格式定义数组:

  • type[] arrayName;
  • type arrayName[];

为了更好的语音及可读性,应该使用第一种定义语法。

数组初始化

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

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

 

静态初始化语法如下:

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][]

这相当于定义了lengthtype[]类型的变量,并且此时这些变量都是null

更一般的,对于更高维的数组,允许仅指定至少最高维的前任意维的维度,如下:

arrName = 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”字母前缀并再加前导符组成。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值