繁体   English   中英

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

[英]Difference between creating a “new object” and “Class objectname”

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

有什么区别:

Phone p;

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

new Phone(200)

我已经谷歌搜索,甚至在Eclipse上尝试过,但无法弄明白。

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

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

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

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

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

(注意,在Java中,所有类型都是引用类型的“变量”实际上都是引用处理程序。只有value-type的变量才包含值。由于Phone是引用类型(它是一个class ), Phone p总是一个“参考Phone ”。)

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

Phone p = new Phone(200)是对Phone对象的引用,该对象已使用构造函数Phone(int var)

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

Phone p;

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

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

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

new Phone(200)

在这里,您只是创建一个Phone类型的Object,但没有对它的引用,因此该对象又是JVM收集的垃圾(如果没有在内部引用其他内容)。

问候!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM