当前位置: 首页 > 知识库问答 >
问题:

JDK8中的动态数组

尤夕
2023-03-14

作为一名前C/C++普通程序员,我刚刚开始与Java混在一起。我对JDK8中声明数组的方式很感兴趣。我按照一本书的要求,将数组声明为一个对象,如下所示。

    int[] exampleArray = new int[10];

我完全同意使用数组作为对象。但是在我的IDE(Netbeans 8)上,我得到一个通知,说“字段示例数组可以是最终的”。当我删除新的int[10]部分时,我得到了正常的编译,没有任何通知。这是否意味着JDK中的数组是动态分配的?我还没有尝试迭代数组。

根据我在Google上的发现,我认为数组是作为链表实现的,对吗?

谢谢

共有1个答案

顾涵衍
2023-03-14

从Java语言规范(第8版)第329页:

在Java编程语言中,数组是对象(§4.3.1),是动态创建的,并且可以分配给对象类型的变量(§4.3.2)。类对象的所有方法都可以在数组上调用。

这里的关键是对象。因此,变量examplearray可能是null。公共方法(不包括公共静态void main)接受数组和varargs(也称为“变量参数”;由运行库制成数组)作为参数不能保证调用ExampleArray.Lengts总是安全的(例如,因为可能会向您抛出NullPointerException)。而且,对于您编写的每个类型(类和接口),都会有一个相应的类对象来表示数组(例如foo[].classbar[].class)。

数组的实现方式将超出规范,而JLS(Java语言规范)并没有解决这个问题,至少我在仔细研究之后发现的不是。

此外,在为变量赋数组时,您可以自由地使用以下简写:

int[]exampleArray={1,2,3};

int[][] multi = {{}};

int[] multi[];

int multi[][];

另一点值得一提的是,数组的长度永远不能改变。

final关键字有几种不同的含义,这取决于您在什么上下文中如何使用它。首先,常量在许多语言中仅作为源代码文字存在。如果使用低级API,Java中的final字段可以修改,就像C++中的常量指针可以转换为非常量指针一样。但是,在Java中将变量声明为final会告诉编译器和大多数运行时,这个变量只会被写入一次。在我看来,在Java中使用final关键字有三个原因。

>

  • 您的源代码读起来更好。您将立即“保证”作为一个源代码的读者,变量…只能写入一次。如果他作为一个局部变量出现在一个方法中,那么他很可能是在现场初始化得太正确了,您可能会放心地知道这个变量不会再改变值。如果您看到一个标记为final的静态字段或一个实例字段,那么您可以非常肯定的是,在完全构造对象之前(很可能是在构造函数中),该字段将由程序员显式初始化。

  •  类似资料:
    • 我已经安装了JDK8,并尝试运行Eclipse。我收到以下警告消息: 忽略这个VM选项的原因是什么?

    • 我试图在NetBeans 12.2上安装JDK8作为一个平台,但我一直收到以下错误消息: “不行 有办法解决这个问题吗?还是有一个版本的JDK8不会产生这个错误消息? 进一步:我应该提到我在MACOS大苏尔。 以下是我在Terminal中使用java-version得到的结果: java版本“15.0.2”2021-01-19 java(TM)SE运行时环境(构建15.0.2 7-27)java热

    • 我们已有的几件: Post 模型定义在 models.py 中,我们有 post_list views.py 和添加的模板中。 但实际上我们如何使我们的帖子出现在我们的 HTML 模板上呢? 因为那是我们所想要的: 获取一些内容 (保存在数据库中的模型) 然后在我们的模板中很漂亮的展示,对吗? 这就是 views 应该做的: 连接模型和模板。 在我们的 post_list 视图 中我们需要获取我们

    • 本文向大家介绍Dapper.NET Dapper中的动态参数,包括了Dapper.NET Dapper中的动态参数的使用技巧和注意事项,需要的朋友参考一下 示例            

    • 我有三类,像故事,电影故事,照片 我想显示数据类别明智的数据从数据库 1.故事*data1*data2*data3 2.电影故事*data1*data2*data3 控制器: 型号: 查看: 数据库: 创建表home_page: 创建表(int(11)not NULLAUTO_INCREMENT,int(11)DEFAULT NULL,int(11)DEFAULT NULL,text,

    • array.h #include<stdio.h> #include<stdlib.h> struct data { int *p;//指针保存数组的起始点 int length;//保存数组的长度 int stat;//0代表无序,1代表有序从小到大,2有序从大到小 int reallength;//实际分配的内存长度 };