在Java中,数组是一个对象。我的问题是......是在创建新数组时调用的Object构造函数吗?我们希望使用这个事实来检测Object构造函数,并使用一些额外的字节码来检查正在构造的数组的长度。那会有用吗?
答案 0 :(得分:6)
根据JVM spec:“使用一组不同的指令创建和操作数组。”因此,虽然数组是对象的实例,但它们的初始化方式与其他对象的初始化方式不同(如果从该链接锚点向上滚动,则可以看到)。
答案 1 :(得分:1)
就Java语言规范而言,虽然两者都使用new
关键字,但Class Instance Creation Expressions和Array Creation Expressions是不同的表达形式,每种都有自己的规则。 Array Creation Expressions的描述没有提到调用构造函数。
答案 2 :(得分:0)
我不这么认为,因为您无法派生本机数组来覆盖构造函数
答案 3 :(得分:0)
您可以使用字节代码操作来检查创建新数组的位置。
答案 4 :(得分:0)
不。我在AspectJ邮件列表上找到了这个:http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg02975.html。
您可能会询问有关数组的原因,但如果可以的话,为什么不切换到集合类。这将为您提供很多拦截和验证的机会。