创建“新对象”和“类对象名”之间的区别

时间:2011-11-29 16:44:43

标签: java class object

比方说,我有一个名为Phone的课程。

有什么区别:

Phone p;

Phone p = new Phone(200) //(200 is the price of the phone).

new Phone(200)

我用谷歌搜索过,甚至在Eclipse上尝试过但无法理解它。

5 个答案:

答案 0 :(得分:5)

第一个代码段仅声明具有给定类型p的变量Phone。您尚未创建任何对象,只创建了变量。

第三个实例化一个新的Phone对象(未分配给变量)。

第二个将声明和实例化两者合并为一行代码。

Phone p; // declaration of variable 
p = new Phone(200); // instantiation of object, assigned to variable 

Phone p = new Phone(200); // declaration and instantiation in a single line

要使用p,您需要实例化它(或以其他方式初始化它)。声明本身没用。在本地(在方法范围内声明的变量)中,在不首先初始化它的情况下使用它是非法的。如果它是类级别成员,那么当您尝试访问其任何成员函数时,它将只是一个空指针。

答案 1 :(得分:5)

Phone p;只声明一个引用处理程序p,它不指向任何地方(它是一个未初始化的,在你为它分配东西之前不能使用[感谢@Anthony])。

Phone p = new Phone(200);声明一个引用处理程序p,它指向一个新创建的Phone对象(用Phone(200)初始化)。

new Phone(200)创建一个新的Phone对象,但由于没有对它的引用存储在任何地方,它立即有资格进行垃圾收集(除非它的构造函数在某处存储引用,即)。 p>

(注意,在Java中,类型为引用类型的所有“变量”实际上都是引用处理程序。只有value-type的变量才包含值。因为Phone是引用类型(它是class),Phone p始终是“对Phone的引用”。)

答案 2 :(得分:1)

Phone p是对尚未初始化的Phone对象的引用。

Phone p = new Phone(200)是对使用构造函数Phone(int var)启动的Phone对象的引用。

new Phone(200)使用构造函数Phone(int var)创建一个新的Phone对象。

答案 3 :(得分:1)

Phone p;

只是一个引用或“指针”,因为有些人喜欢C语言会调用它。它包含对象的路径,但当前路径为空。

Phone p = new Phone(200) //(200 is the price of the phone).

在这里,您将通过调用其取值为200的构造函数来创建新的Phone对象。然后将该对象分配给参考p。

new Phone(200)

这里你只是创建一个Phone类型的Object,但是没有对它的引用,所以这个对象又是JVM收集的垃圾(如果没有在内部引用其他东西)。

问候!

答案 4 :(得分:0)