这是一个非常简单的问题,但我想知道没有名字的类的对象。例如,如果我有一个班级' Zombie'如何在不指定新名称的情况下创建新的名称(例如Zombie zombie1 = new Zombie();
)
答案 0 :(得分:7)
new Zombie()
将创建一个新的僵尸实例。但是,如果您不想,则不必将其分配给本地变量或数据成员。例如,你可以在一个集合中积累这些僵尸:
List<Zombie> undeadLegion = new LinkedList<>();
for (int i = 0; i < 1000; ++i) {
undeadLegion.add(new Zombie());
}
答案 1 :(得分:1)
对象没有名字。无法为对象指定名称,也无法在运行时找到它的名称(在调试信息的帮助下)
您可能想要的是,我如何避免声明对对象的命名引用。
将引用用作
之类的表达式的最简单方法select
t1.user_name,
t1.first_name,
t1.last_name,
(select name from custom_fields
where custom_field_id= t2.custom_field_id)
from
user_data t1 left join
custom_field_data t2 on t1.user_id=t2.userid
答案 2 :(得分:1)
对象没有名称。变量有名字。您不必将new
的结果存储到变量中:例如,您可以将其直接作为参数传递,或者将其丢弃。
答案 3 :(得分:1)
您所指的是name binding:数据与标识符的关联。
绑定的最常见用途是确定变量的范围。绑定数据由语言保证(例如&#34;范围&#34;)。在Java中,反之亦然:在垃圾收集之前,未绑定的数据可能仍存在于堆上。但是,没有办法访问这些数据,因为你无法识别它(没有涉及垃圾收集器的深层魔法)。
您只需撰写new Zombie()
即可创建未绑定的数据。你不必给它一个特定的名字;它可能是(命名)数组的未命名成员:
// Create a new ArrayList<> and bind it to the name list.
List<Zombie> list = new ArrayList<Zombie>();
// Create new Zombie objects, but do not name them.
// Instead, add them to the list.
for (int i = 0; i < 5; ++i) {
list.add(new Zombie());
}
您还可以将对象直接传递给函数。它不会受到调用者范围内任何名称的约束,但它将受限于被调用者的范围:
void a()
{
b(new Zombie());
}
void b(Zombie z)
{
}
此处,new Zombie()
根本没有在a
中命名 - 但一旦传递给b
,它就会绑定到z
。< / p>
最后,您可以创建一个对象,并且不做任何事情:
new Zombie();
除非构造函数在某处存储对自身的引用,否则它将立即无法访问。但是,打印到控制台等副作用仍然可见。
答案 4 :(得分:0)
如果要将新对象传递给方法等,可以使用构造函数调用(new Zombie()
)而不将其赋值给变量。
例如,如果您有一个名为doThingsWithZombie()
的方法采用Zombie
对象,则可以执行以下操作:
doThingsWithZombie(new Zombie());
您还可以将新对象添加到列表中:
LinkedList<Zombie> zombieList = new LinkedList<Zombie>();
zombieList.add(new Zombie()); // Add a zombie
zombieList.add(new Zombie()); // Add a zombie
zombieList.get(0) // Gets the first zombie