如果我错了,请纠正我,我只是想澄清一下,我理解这个权利。对象参考澄清
当你在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