在Java中创建数组时,是否会调用对象构造函数?

9

在Java中,数组属于对象。我的问题是...当创建新的数组时是否调用了对象构造函数?我们想利用这一点来使用一些额外的字节码仪器化对象构造函数,以检查正在构建的数组的长度。那样行得通吗?

5个回答

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

看起来在 newarray 之后构造函数没有被调用 :-( 谢谢。 - Peter Štibraný

1
就Java语言规范而言,尽管两者都使用new关键字,类实例创建表达式数组创建表达式是不同的表达形式,每个表达式都有自己的规则。数组创建表达式的描述没有提及调用构造函数。

0

我认为不行,因为您无法派生本地数组以覆盖构造函数


我不确定我理解了。你能详细说明一下吗?(我不想覆盖构造函数...我想在那里放置一些额外的字节码。每次创建对象时都会调用Object()构造函数。由于数组也是一个对象,因此我期望在这种情况下也会调用Object()) - Peter Štibraný

0

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


你的意思是在每个类的每个方法中都加入仪器吗?(我们想避免这种情况。) - Peter Štibraný

0

你好...你的第一行似乎缺少了一些东西。 - Peter Štibraný

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接