5

你怎么做呢?是不是就这么简单:

Name myName = new Name();

我有点困惑。它应该是一个没有实例变量的类。我只需要“创建一个空对象”。当然,构造函数也是空的。

4

3 回答 3

7

在 Java 术语中,“空对象”非常模糊。我可以这样解释:

Object empty = new Object();

这是关于您可以创建的最空的对象。

但是在你的例子中,

Name myName = new Name();

这将根据您在默认构造函数中放置的任何代码创建一个对象。(我猜如果您将所有内容都设置为默认值,那是很空的)

于 2013-11-12T00:06:02.640 回答
4

如果Name有一个无参数的构造函数,当然。它是否“空”取决于该构造函数的作用或它可能具有的默认值。

无论如何,您如何定义“空对象”?

例如,如果您想要一个变量但不希望它实际上有一个对象,您可以只声明变量而不初始化它:

Name myName;

在这种情况下myName将是null(或“未分配”?取决于上下文),但将是类型Name并且可以在以后使用(一旦分配了一个值)。

变量本身所做的只是指向内存中存在“对象”的位置。所以类似的东西Name myName不会“创建”一个对象,它只是创建指向内存位置的指针。 new Name()实际上是通过调用它的构造函数来创建一个对象。当像在您的示例中一样一起使用时,后半部分创建对象,然后前半部分指向内存中对象存在的位置。

于 2013-11-12T00:01:57.950 回答
1

这取决于你所说的空是什么意思。你所做的是实例化一个对象。如果对象构造函数初始化了 Name 对象的字段,则对象字段具有分配给它们的值。当你调用 new 时,这些字段的内存也被分配了。因此,即使您没有为它们分配值,它们实际上确实存在于内存中,但根本没有初始化。

于 2013-11-12T00:01:33.957 回答