数组编译源码大全-java数组

数组的定义 字段的初始化 数组对象的多维字段的特殊性 字段和形式参数

1.数组的定义

数组只是相同类型的对象或原始数据类型的序列,通过标识符名称封装在一起。

数组是使用方括号下标运算符定义和使用的。

定义链表有两种格式:

//第一种
int[] a;
//第二种
int a[];

2.数组的初始化

数组定义完成后,此时你拥有的只是链表的引用,并没有为链表对象本身分配空间。 为了给链表创建相应的存储空间,必须编写初始化表达式。 对于链表,初始化操作可以出现在代码中的任何位置,除了特殊的初始化表达式。

数组的初始化表达式有以下三种:

//第一种
 int[] arr1 = {1,2,3};
//第二种
 int[] arr3 = new int[3];
 Integer[] arr2 = new Integer[3];
//第三种
int[] arr4 = new int[]{5,6,7,};//最后一个逗号是可选的(这个特性使维护长列表变得更容易?)
Integer[] arr5 = new Integer[]{new Integer(12),new Integer(23),new Integer(34)};

第一种类型由一对大括号组成,将值括起来,该值必须出现在创建链表的位置。 在这种情况下,存储空间的分配将由编译器负责,相当于使用new。

第二种方法在初始化时指定链表的大小。 对于基本类型的字段,数组元素会被手动初始化为空值(对于数字和字符,为0;对于布尔类型,为false)。 非基本类型字段,比如arr2,此时只是引用字段,数组元素全部为null。 仅当将对象形参赋予引用时数组编译源码大全,初始化过程才结束。 如果忘记创建对象并在链表中使用空引用,则会在运行时产生异常。

第三种是初始化时的数组元素形参。

所有字段都有一个固有的成员——长度,通过它可以知道链表的大小,但不能改变。 Java链表的计数是从第0个元素开始的,所以可以使用的下标最大数量是length-1。 一旦下标越界,就会发生运行时异常。 需要注意的是,length是链表的大小,而不是实际保存的元素数量。 和arr2一样,在链表初始化之前,可以访问链表的大小,但是无法知道链表中元素的具体数量。

3. 数组对象

虽然数组标识符只是一个引用,指向堆中创建的真实对象,但这个(数组)对象用于保存对其他对象的引用。

数组编译源码大全-java数组

“[]”语法是访问链表对象的唯一方法。

对象数组和基本类型字段在使用上几乎相同。 唯一的区别是对象数组存储引用,而基本类型字段直接存储基本类型值。

4.多维链表

组成矩阵的数组中每个位向量的值可以是任意宽度,称为粗域。

基本类型:

//二维数组
int[][] a = {{1,2,3},{4,5,6}};
//三维数组
int[][][] b = new int[3][2][6];
int[][][] c = new int[3][][];//在其他地方初始化二维和三维数组。
for(int i = 0; i < c.length; i++){
  c[i] = new int[4][];
  for(int j = 0; j < c[i].length; j++){
    c[i][j] = new int[5];
  }
}

对于非基本类型,创建方法与基本类型类似,即需要给每个元素一个形参,以避免空引用引起的运行时异常。

5.数组的特殊性

数组在三个方面与其他类型的容器不同:效率、类型和保存基本类型的能力。

效率:在 Java 中数组编译源码大全,数组是存储和随机访问对象引用序列的最有效方法。 元素访问速度很快,但代价是链表对象的大小是固定的,在其生命周期内不能改变。 ArrayList可以通过创建一个新实例,然后将旧实例中的所有引用移动到新实例中来实现手动分配更多空间。 但这些灵活性是需要开销的,因此ArrayList的效率比链表低很多。

数组编译源码大全-java数组

类型:在子类化之前,当其他容器处理对象时,它们将被视为没有任何特定类型的容器,即它们将被视为Java中所有类的根类Object。 在子类化之前数组比容器更好的原因是您可以创建一个字段来保存特定类型。 这意味着你可以通过编译时检测来避免插入错误的类型和提取不合适的类型,虽然在运行时也会检测到错误,但这种形式更加优雅。

基本类型:数组可以保存基本类型,这在类库之前的容器中是不可能的。 通过类库,容器可以指定它们所保存的对象的类型,并且通过手动打包机制,容器可以显示为保存基本类型。

6.数组和类库

一般来说,数组不能很好地与类库配合,并且无法实例化具有参数化类型的字段。 确实,在编译时不允许实例化链表对象,但允许创建对这些字段的引用。 尽管您无法创建保存类库的实际链表对象,但您可以创建一个非通用链表,然后对其进行变异。

List[] list = new List[33];//编译期检查不通过
List[] list;//编译期检查通过
List[] la = new List[5];//非泛型数组
list = (List[]) la;//转型
list[0] = new ArrayList();
list[1] = new ArrayList();//编译期检查不通过

事实上,通用容器总是比类库链表更好的选择,理解一下就可以了。

参考:

《Java编程思想》

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 数组编译源码大全-java数组 https://www.wkzy.net/game/185913.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务