所以我有 5 個物件,我想使用 for 回圈來實體化它們
SomeObject obj1, obj2, obj3, obj4, obj5;
//Instead of having to write this
obj1 = new SomeObject();
obj2 = new SomeObject();
obj3 = new SomeObject();
//I want to be able to do this
for (int i = 0; i < 5; i ) {
//instantiate the objects with "new" keyword here
}
我嘗試過使用陣列,但它們只在陣列內創建物件的實體,而原來的 obj1,... 根本沒有改變
我嘗試了什么:
SomeObject obj1, obj2, obj3, obj4, obj5;
SomeObject[] objectArray = {obj1, obj2, obj3, obj4, obj5} //IntelliJ gives warning "Value obj1,... is always null"
for (int i = 0; i < 5; i ) {
objectArray[i] = new SomeObject(someRandomValueInsideHere);
}
System.out.println(obj1); //obj1 is still null, even though the loop instantiated the objects
System.out.println(objectArray[0]); //this exists. The whole array is also correctly populated
我在其他地方讀到了關于 java 物件“按值傳遞參考”的資訊。有人可以進一步解釋嗎?我在這里錯過了一些非常明顯的東西嗎?
uj5u.com熱心網友回復:
在 Java 中,物件的宣告和初始化應該盡可能接近,對于較新的 Java 版本,您可以跳過宣告上的型別并用var關鍵字替換它。
也許對您的第一個示例的重寫可以更好地解釋它:
var obj1 = new SomeObject();
var obj2 = new SomeObject();
var obj3 = new SomeObject();
但不要認為它等同于 JavaScript - 在 Java 中,您不能更改 的型別obj1,obj2并且obj3稍后(例如,使用另一個賦值),編譯器會從初始化中派生它。
如果你想為你的變數設定單獨的名字,這個一對一是你可以初始化它們的唯一方法,但不要在“一開始”初始化所有東西,而是盡可能接近實際使用。(它被稱為最小化可見性)
如果您想使用陣列,如第二個示例中所示,并且物件不需要單獨的名稱,但索引號很好,您可以這樣做:
SomeObject[] objectArray = new SomeObject[3];
for (int i = 0; i < 3; i ) {
objectArray[i] = new SomeObject(Math.random());
}
System.out.println(objectArray[2]);
var obj1 = objectArray[0];
System.out.println(obj1);
您始終必須使用索引([0]等)訪問陣列的元素
但是您可以在初始化后將陣列的一個元素分配給一個單獨命名的變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522228.html
標籤:爪哇数组目的
上一篇:根據陣列值創建新的物件鍵值對
