9

在 Java 中,数组是一个对象。我的问题是......创建新数组时是否调用了 Object 构造函数?我们想使用这个事实来使用一些额外的字节码来检测对象构造函数,以检查正在构造的数组的长度。那行得通吗?

4

5 回答 5

6

根据JVM 规范:“数组是使用一组不同的指令创建和操作的。” 因此,虽然数组是对象的实例,但它们的初始化方式与其他对象的初始化方式不同(如果从该链接锚向上滚动,您可以看到)。

于 2009-01-23T22:54:33.197 回答
1

就Java语言规范而言,虽然都使用了new关键字,但类实例创建表达式数组创建表达式是不同的表达形式,各有各的规则。数组创建表达式的描述没有提到调用构造函数。

于 2014-06-15T15:57:53.000 回答
0

我不这么认为,因为您无法派生本机数组来覆盖构造函数

于 2009-01-23T22:43:45.620 回答
0

您可以使用字节码操作将检查放置在创建新数组的位置。

于 2009-01-23T22:56:22.583 回答
0

没有。我在 AspectJ 邮件列表中找到了这个:http: //dev.eclipse.org/mhonarc/lists/aspectj-users/msg02975.html

您可能出于某种原因询问数组,但如果可以,为什么不切换到集合类。这将为您提供很多拦截和验证的机会。

于 2009-01-23T23:26:16.470 回答