如果我錯了,請糾正我,我只是想澄清一下,我理解這個權利。對象參考澄清
當你在java中創建一個對象時,你使用new
關鍵字,然後是類類型。防爆。 new [someclassnamehere]();
根據您的構造函數,您可以在創建對象時通過在參數中提供參數來傳遞參數。
我不確定是否僅僅通過使用new
關鍵字創建一個新對象o的代碼行是有用的,因爲沒有任何內容實際上持有對該信息的引用。但它似乎是正確的。
因此,您可以使用type name
創建一個變量,其中包含對正在創建的新對象的引用。例如:Employee someData;
。但它還沒有真正引用一個對象,看到一個還沒有被創建。因此,通過應用上面討論的信息: Employee someData = new Employee(name);
我們現在創建了一個Employee object
,其中包含員工的一些名稱。關鍵字new
創建了一個對象類Employee
的實例,其中someData
變量引用了新創建的對象。
所以現在someData
變量可以說是引用Employee object
,因爲它包含存儲對象存儲位置的內存地址。這個地址將允許我們訪問對象的實際數據,在這種情況下是員工的名字。
如果我要創建一個數據類型爲Employee
的ArrayList
,我可以在其中存儲Employee objects
。所以我可以將someData
變量添加到arrayList以及someData2
,someData3
等。 (假設他們都是同一類型但包含不同的員工信息)。 因此,每個變量都包含對這些對象的引用。然後ArrayList
對象也包含對這些對象的引用,因爲ArrayList
元素包含引用Employee Objects
的這些someData變量。
例如:
ArrayList.get(1) -> someData -> reference variable(address) -> employee Object
ArrayList.get(2) -> someData2 -> reference variable(address) -> employee Object2
敢肯定我上心下來,到目前爲止,但什麼略有拋出我送行是當你實際上沒有創建一個參考變量。
假設你創建一個循環來創建一個對象(數據正在從某個數據庫等中讀取)並將其添加到ArrayList
。在此循環中,您收集所需的數據並使用它創建一個對象,然後將其直接添加到ArrayList
。
比方說,它看起來像這樣(的一些僞代碼和實際代碼組合)
ArrayList<Employee> list = new ArrayList<Employee>();
// While data from the database still exist (while loop,etc)
// extract some sort of data from the database, such as their name and hours
// create an object of this information and store it in an ArrayList
list.add(new Employee(name, hours);
// end loop
爲了簡單起見,讓我們說,循環跑了5倍,因此創建5個對象。 這意味着它向ArrayList List
添加了5個對象,並且這些對象的引用實際上包含在ArrayList元素中。所以要獲得第一個對象添加到ArrayList
您可以使用list.get(1)
(我很確定ArrayList從1開始,而不是索引0),它返回對該對象的引用。
編輯:請原諒我在這裏的錯誤,我想我有一個brainfart,混淆了。我不知道爲什麼我認爲ArrayList索引像這樣工作了一秒
這是通過使用循環創建對象的正確和標準方法嗎?
答案是「是」,但我不確定你想知道什麼。這個問題非常廣泛。 – 4castle
一切除了_I'm非常確定ArrayList開始於1,而不是索引_ 0是正確的。 _reference variable_是一些引用類型的變量。 「員工」是一種參考類型。所以'員工someData;'是一個參考變量的聲明。 – Savior
*「ArrayList元素包含這些someData變量」*這是我不確定你是否正確的地方。 ArrayList沒有變量,它也有引用。當你調用'theArrayList.add(someData)','someData'的值(它指向的對象的地址)被複制。你最終得到的是兩個單獨的引用(一個在'someData'變量中,一個在'ArrayList'中),它指向同一個對象。 Java引用就像指針一樣。可能會看到http://stackoverflow.com/q/40480/2891664。 – Radiodef