在Java中创建数组时是否调用了Object构造函数?

时间:2009-01-23 22:37:21

标签: java arrays object instrumentation construction

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

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

就Java语言规范而言,虽然两者都使用new关键字,但Class Instance Creation ExpressionsArray Creation Expressions是不同的表达形式,每种都有自己的规则。 Array Creation Expressions的描述没有提到调用构造函数。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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