2012-02-12 115 views
15

我有一流的圖形用戶界面,所以我可以創建這樣的對象:java中的引用和對象有什麼區別?

GUI g1 = new GUI(); 

和這樣的引用變量:

GUI g2; 

現在像我知道,G2是給參考的參考變量到GUI類和g1是GUI類的一個對象。 g1和g2有什麼區別?我可以使用對象的GUI類的屬性,但g2的可能用法是什麼?

+2

我認爲你不能在代碼中使用g2,因爲它還沒有初始化,它是空的。 – evilone 2012-02-12 09:52:31

+3

g1也是參考! – 2012-02-12 09:52:34

+2

我認爲這個問題值得一個不錯的答案保持! – slezica 2012-02-12 10:19:26

回答

22

引用的名字。對象是東西。你可以有不同的名字,甚至對於實際上並不存在的東西。

你可以聲明的名稱,實際上並沒有給他們任何「真正」的意思,是這樣的:

GUI g1; 

您可以分配的含義(真正的東西來指代)與=運營商名稱:

GUI g1 = some_gui; 

名稱可以隨時間變化。同一個名字在歷史的不同點上可以指代不同的事物。

GUI g1 = some_gui; 

doSomething(); 

g1 = some_other_gui; 

也有同義詞:多個名稱可參照同樣的事情:

GUI g2 = g1; 

這幾乎是引用做什麼。他們的名字是爲了表示東西。

東西可以創建:

new GUI(); 

東西可以創建和命名當場供以後參考(字面!):

GUI g1 = new GUI(); 

之類的東西可以用它的名字被提及, (或其任何名稱!):

g1.doSomething(); 
g2.doSomethingAgain(); 

可以創建不同的同類物質(Class),並且可以創建nam ED是不同的:

GUI g1 = new GUI(); 
GUI g2 = new GUI(); 
GUI g3 = new GUI(); 

GUI g1_synonym = g1; 

:)

+2

偉大的第一段。介紹面向對象思想的好方法。 – 2016-06-10 05:48:19

5

你是不是能夠使用g2,直到你分配對象給它,因爲目前它不指向任何對象,而g1已經指向GUI對象,你可以用它。

此:

GUI g1 = new GUI(); 

相當於幾乎:

GUI g1; 
g1 = new GUI(); 
2

對象是像氣泡浮通過被稱爲堆空間。變量只是指向這些泡泡的鏈接。表達式new GUI()創建一個對象,並且=運算符將其鏈接到變量g1g2也是一個變量,但它沒有鏈接到任何對象。您可以輕鬆地編寫

g2 = g1; 
g1 = null; 

現掉換他們g2g1指的是在開始的對象,g1指的是什麼。該對象完好無損,只有變量發生了變化。

0

其實在你的變量的Java名稱是一個引用(基本類型除外)。你不能使用g2,因爲它沒有被初始化,甚至不爲空。嘗試調用g2的方法會導致編譯時錯誤。在GUI g2;之後g2未指向內存中的對象。如果你將g2設置爲null,像這樣GUI g2 = null;你可以在聲明後使用它,但是如果你調用g2的方法,你會得到一個運行時間NullPointerException。

0

g1和g2都是參考。但是g2沒有初始化,所以不能在代碼中使用。

//Tells that g1 g2 should hold Gui object. Currently they are not holding any object. 
Gui g1; 
Gui g2; 

//Now g1 reference holds object. g2 reference still doesn't point to any object. 
g1 = new GUI(); 
11

是什麼在Java中引用和對象之間的區別?

引用是一種提供訪問其類型對象的方法的實體。一個對象是一個提供訪問它的類或類型成員的方法的實體。

通常,您不能訪問沒有對其引用的對象。

class GUI 
{ 
    void aMethod() 
    { 
     // some business logic. 
    } 
} 

可以調用aMethod使用或不使用參考。但你肯定需要一個對象。

沒有參考:

new GUI().aMethod(); 
// you can't reuse the object 
// bad way to code. 

隨着參考:

GUI aGUIReference = new GUI(); 
aGUIReference.aMethod(); 
// Now, the object can be reused. 
// Preferred way to code 

現在一點解釋給你的代碼行:

GUI g1 = new GUI(); 
// g1 is a reference to an object of GUI class. 

GUI g2; 
// g2 is a reference that can point to an object of GUI class 
// but currently not pointing to any. 

的B/W g1唯一的區別和g2g1與對象,但g2點初始化null

g2 = g1; 
// it means g2 will point to the same object g1 is pointing to 
// only one object but two references. 
+1

這是正確的答案。 – 2015-10-15 08:11:45

+2

這需要被接受的答案 – wfunston 2016-12-06 02:40:20

0

引用的名字。對象是東西。你可以有不同的名字,甚至對於實際上並不存在的東西。

你可以聲明的名稱,實際上並沒有給他們任何「真正」的意思,是這樣的:

GUI g1; 

名稱可以隨時間而改變它們的意義。同一個名字可以在不同的時間指向不同的事物。

GUI g1 = some_gui; 

doSomething(); 

g1 = some_other_gui; 

這幾乎是參考文獻所做的。他們的名字是爲了表示東西。

東西可以創建:

new GUI(); 

東西可以創建和命名當場供以後參考(字面!):

GUI g1 = new GUI(); 

:)

0

引用是一個 「鉤」 在那裏你可以掛的對象。 一個對象可能位於多個鉤子上。

3

References有幾分指針到名爲objects.

GUI g1 = new GUI(); 

爲了解釋的內存塊,讓我打破了上述說法。

GUI g1; 
g1 = new GUI(); 

第一步驟:g1是參考變量(指針),還沒有指向任何有效的存儲器位置。

第二步:第二步爲類GUI的對象分配內存,賦值操作使參考變量g1指向此對象(內存位置)。 new關鍵字爲類GUI的對象分配內存。