說例如我有一個叫做Phone的類。創建一個「新對象」和「Class objectname」之間的區別
之間有什麼區別:我GOOGLE
Phone p;
和
Phone p = new Phone(200) //(200 is the price of the phone).
和
new Phone(200)
,甚至嘗試過Eclipse的,但不能弄明白。
說例如我有一個叫做Phone的類。創建一個「新對象」和「Class objectname」之間的區別
之間有什麼區別:我GOOGLE
Phone p;
和
Phone p = new Phone(200) //(200 is the price of the phone).
和
new Phone(200)
,甚至嘗試過Eclipse的,但不能弄明白。
Phone p;
只聲明瞭一個參考處理程序p
它沒有指向任何地方(它是一個未初始化的,只有在你指定了某些東西之後才能使用[謝謝@Anthony])。
Phone p = new Phone(200);
聲明瞭一個基準處理器p
指向新創建Phone
對象(Phone(200)
初始化)。
new Phone(200)
創建一個新的Phone
對象,但由於沒有引用它的地方存儲在任何地方,它立即有資格進行垃圾回收(除非它的構造函數在某處存儲引用)。
(請注意,在Java中,所有的「變量」,其類型爲引用類型是真正參考的處理程序。值類型的變量只有直接包含的值。由於Phone
是引用類型(這是一個class
) Phone p
總是爲「參照Phone
」。)
第一個片段只聲明變量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
,您需要實例化它(或以其他方式初始化它)。聲明本身沒有用處。在本地(在方法範圍內聲明的變量),在不首先初始化的情況下使用它是非法的。如果它是一個類級別的成員,那麼當您嘗試訪問其任何成員函數時,它將僅僅是一個空指針。
Java中的每個*變量都不會被初始化嗎?第一個'p'應該有一個明確的值。 –
@KerrekSB,類成員初始化爲默認值(對於引用爲null),但本地化程序不會初始化(就編譯器而言)並且必須在第一次訪問之前進行初始化。 –
有趣。那麼'p'處於一個不確定的狀態? –
Phone p
是尚未被初始化一個電話對象的引用。
Phone p = new Phone(200)
是對構造函數Phone(int var)
初始化的Phone對象的引用。
new Phone(200)
使用構造函數Phone(int var)
創建一個新的Phone對象。
Phone p;
只是一個引用或「指針」,因爲有些喜歡C語言的人會稱它爲「指針」。它包含對象的路徑,但當前路徑爲空。
Phone p = new Phone(200) //(200 is the price of the phone).
在這裏,你創建了一個新的電話對象,通過調用其構造函數取200值。該對象然後被分配給參考p。
new Phone(200)
這裏你只是創造型電話的對象,但沒有提到它,所以這個對象又由JVM進行垃圾回收(如果沒有什麼別的引用內部)。
問候!
第三位:假設在構造函數中沒有「泄漏這個」:) –
@KublaiKhan:是的,我說過。構造函數可以調用一些Mighty Singleton來存儲引用,例如:-)。 –