Java - 对象声明和初始化

7
构造一个新的对象时,我使用以下代码。在这个代码中,对象引用是变量'a'吗?
BankAcc a = new BankAcc();

此外,如果以上内容将一个新的对象赋值给变量a,那么以下内容会做什么?它只是创建一个没有变量或对象引用的新对象吗?
new BankAcc();

谢谢!

9个回答

8

是的,没错。

第二种情况可能在您只想使用匿名对象而不关心引用时很有用。例如:

new Thread(new Runnable() {
     public void run () { }
}).start();

+1 我还没有深入研究过线程,但我发现这个例子很有趣,它说明了为什么你可能不需要一个对象的引用。 - T I
1
如果对象在其内部构建/初始化的过程中将自身添加到某种集合中,则无需保留引用。 - Aaron J Lang
@AaronJLang 这也非常有趣,不确定你会在哪里/何时做这个,但我会调查一下,谢谢。 - T I

6
根据这个Java教程所解释的,使用以下方式创建一个对象:
BankAcc a = new BankAcc();

这是一个多步骤的过程。你需要进行声明实例化初始化

在这个教程中,我只会突出与你的问题相关的最有趣的部分:

  • 声明一个变量,你使用类型 名称;(在这种情况下是BankAcc a;),它表示a将/可以用于引用BankAcc类型的数据。此时,a不引用任何对象。

  • 实例化a,你需要使用new关键字。这将为新对象分配内存并返回对该内存的引用。 new操作符需要一个后缀参数:调用构造函数。无论是否将由调用new返回的引用分配给变量都取决于你。你也可以直接在表达式中使用这个引用(例如:new Rectangle().height;)。

  • 初始化是对构造函数的实际调用,它初始化了新对象。构造函数由new操作符调用。


3

new BankAcc() 创建对象并调用构造函数。有时候你需要这样做,例如:

Rectangle rect = new Rectangle(new Point(100, 200), new Dimension(100, 300));

这只是一个代码示例,让您了解它如何使用。


1

是的,它只是创建对象,但它不会被分配给任何引用,因此您无法访问该对象并对其执行任何操作。它将一直留在内存中,直到被垃圾回收。


1

是的,没错。

请注意,仅创建一个类的新实例而不持有对其的引用并不罕见(尽管不一定理想),因为该类的构造函数可能会执行给定操作所需的所有操作。


1

第二行代码实例化了一个 BankAcc 类的匿名实例。

这是一种快速实例化类的方式,通常在您只需要引用一次时使用,例如将类实例传递给方法参数:

myFunc(new BankAcc());

0

是的,变量引用是"a",new BankAcc();创建一个没有变量的新对象,因此使其成为匿名对象。


0

我认为Sun已经很好地概括了它,

"new运算符通过为新对象分配内存并返回对该内存的引用来实例化类。new运算符还调用对象构造函数。"

所以是的,a是您使用new运算符实例化的BankAcc对象的引用,即您将=的返回值赋给变量a,它是指向类型为BankAcc的实例的引用。

关于您的第二个观点,这可以完成(编译和执行),但我看不出除非构造函数做了一些“重要”的事情,否则您会这样做。

编辑:请参考Tudor的答案,了解不使用引用实例化的示例


-5

对象是实时实体或现实世界实体。例如,笔、汽车、板、桌子、铅笔等都是对象。

假设你的类名是Book.here,我们如何声明对象

Book obj = new Book();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接