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

ora*_*nge 2 java class object

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

有什么区别:

Phone p;
Run Code Online (Sandbox Code Playgroud)

Phone p = new Phone(200) //(200 is the price of the phone).
Run Code Online (Sandbox Code Playgroud)

new Phone(200)
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*ram 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
Run Code Online (Sandbox Code Playgroud)

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


Ker*_* SB 5

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

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

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

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