BankAcc a = new BankAcc();
此外,如果以上内容将一个新的对象赋值给变量a,那么以下内容会做什么?它只是创建一个没有变量或对象引用的新对象吗?
new BankAcc();
谢谢!
BankAcc a = new BankAcc();
new BankAcc();
谢谢!
是的,没错。
第二种情况可能在您只想使用匿名对象而不关心引用时很有用。例如:
new Thread(new Runnable() {
public void run () { }
}).start();
BankAcc a = new BankAcc();
这是一个多步骤的过程。你需要进行声明、实例化和初始化。
在这个教程中,我只会突出与你的问题相关的最有趣的部分:
要声明一个变量,你使用类型 名称;
(在这种情况下是BankAcc a;
),它表示a
将/可以用于引用BankAcc
类型的数据。此时,a
不引用任何对象。
要实例化a
,你需要使用new
关键字。这将为新对象分配内存并返回对该内存的引用。 new
操作符需要一个后缀参数:调用构造函数。无论是否将由调用new
返回的引用分配给变量都取决于你。你也可以直接在表达式中使用这个引用(例如:new Rectangle().height;
)。
初始化是对构造函数的实际调用,它初始化了新对象。构造函数由new
操作符调用。
new BankAcc()
创建对象并调用构造函数。有时候你需要这样做,例如:
Rectangle rect = new Rectangle(new Point(100, 200), new Dimension(100, 300));
这只是一个代码示例,让您了解它如何使用。
是的,它只是创建对象,但它不会被分配给任何引用,因此您无法访问该对象并对其执行任何操作。它将一直留在内存中,直到被垃圾回收。
是的,没错。
请注意,仅创建一个类的新实例而不持有对其的引用并不罕见(尽管不一定理想),因为该类的构造函数可能会执行给定操作所需的所有操作。
第二行代码实例化了一个 BankAcc 类的匿名实例。
这是一种快速实例化类的方式,通常在您只需要引用一次时使用,例如将类实例传递给方法参数:
myFunc(new BankAcc());
是的,变量引用是"a",new BankAcc();
创建一个没有变量的新对象,因此使其成为匿名对象。
我认为Sun已经很好地概括了它,
"new运算符通过为新对象分配内存并返回对该内存的引用来实例化类。new运算符还调用对象构造函数。"
所以是的,a
是您使用new
运算符实例化的BankAcc
对象的引用,即您将=
的返回值赋给变量a
,它是指向类型为BankAcc
的实例的引用。
关于您的第二个观点,这可以完成(编译和执行),但我看不出除非构造函数做了一些“重要”的事情,否则您会这样做。
编辑:请参考Tudor的答案,了解不使用引用实例化的示例
对象是实时实体或现实世界实体。例如,笔、汽车、板、桌子、铅笔等都是对象。
假设你的类名是Book.here,我们如何声明对象
Book obj = new Book();