[英]What is the difference between “ParentClass objectName1= new SubClass() ” and “SubClass objectName2 = new SubClass()”?
[英]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.