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

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

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

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

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

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

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

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