Java如何创建没有名称的类对象

时间:2015-08-09 21:13:45

标签: java new-operator

这是一个非常简单的问题,但我想知道没有名字的类的对象。例如,如果我有一个班级' Zombie'如何在不指定新名称的情况下创建新的名称(例如Zombie zombie1 = new Zombie();

5 个答案:

答案 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