我使用以下代码将新StockRecord
添加到我的stockRecords
集合中。 StockRecord延长股票。
for (Stock s : stock) {
stockRecords.add(new StockRecord(s.get_storeID(),
s.get_sku(), s.get_itemCount()));
}
我在Stock
和StockRecord
的构造函数中都有一个println语句。当我运行此代码时,我得到以下输出:
Stock()
StockRecord()
Stock()
StockRecord()
Stock()
StockRecord()
Stock()
StockRecord()
在for-each循环中使用变量s
是否实际创建了Stock
的实例?
答案 0 :(得分:3)
没有。 For循环使用java迭代器。在循环的每次迭代中,Iterator.hasNext
和Iterator.next
在stock.iterator()
返回的对象上调用。 java.util
集合不会创建新对象,但如果您有自定义集合,则可能。
另一种可能性是您在调用getter或StockRecord
构造函数本身的正文中创建对象。在那些地方寻找“新”。
答案 1 :(得分:2)
每当实例化一个新对象时,就会在其自己的构造函数之前调用其父构造函数(依此类推,直到Object
)。由于StockRecord
扩展Stock
,因此当您调用new StockRecord
时,会在指定的Stock
构造函数之前调用某个StockRecord
构造函数。这就是为什么你会按顺序看到这些印刷语句的原因。
答案 2 :(得分:1)
您在每次迭代时在Stock
中引用的s
实例已经存在。但是,您每次都会创建一个StockRecord
的新实例(这可能会创建其他类的其他实例)。
答案 3 :(得分:0)
Stock s
从集合/数组对象stock
中获取引用。它不会创建任何对象。