2012-02-12 10 views
15

私はこのようなオブジェクトを作成することができますので、私はクラスのGUIを持っています。Javaのリファレンスとオブジェクトの違いは何ですか?

GUI g1 = new GUI(); 

と、このような参照変数を:

GUI g2; 

今同じくらい私が知っているように、G2は、参照を与える参照変数でありますGUIクラス、g1はGUIクラスのオブジェクトです。 g1とg2の違いは何ですか?私はオブジェクトとGUIクラスのプロパティを使用することができますが、g2の可能な使用法は何ですか?

+2

まだ初期化されておらず、nullであるため、コードでg2を使用できないと思います。 – evilone

+3

g1も参照です! –

+2

私はこの質問が素晴らしい解決策に値すると思います。 – slezica

答えて

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(); 

同じ種類(クラス)の異なるものを作成することができます異なっ編:

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

GUI g1_synonym = g1; 

:)

+2

大きな最初の段落。 OOPのアイディアを紹介する良い方法。 –

5

はすでにGUIオブジェクトを指していますが、現在はオブジェクトを指していないので、オブジェクトを割り当てるまではg2を使用することはできません。

この:

GUI g1 = new GUI(); 

はとほとんど同じです:

GUI g1; 
g1 = new GUI(); 
2

オブジェクトはヒープと呼ばれる空間を浮遊泡のようなものです。変数は単にこれらのバブルへのリンクです。式new GUI()はオブジェクトを作成し、=演算子はそれを変数g1にリンクします。 g2も変数ですが、どのオブジェクトにもリンクされていません。あなたは簡単に今すぐg2

g2 = g1; 
g1 = null; 

を書き込むことによって、それらを交換することができg1は初めにを参照しているオブジェクトを参照し、g1は何を指します。オブジェクトは元のままで、変数のみが変更されました。

0

実際にJavaの変数名は参照(プリミティブ型を除く)です。 g2は初期化されておらず、nullでもないため使用できません。 g2のメソッドを呼び出そうとすると、コンパイル時にエラーが発生します。 GUI g2;の後、g2はメモリ内のオブジェクトを指していません。このGUI g2 = null;のように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を呼び出すことができます。あなたは間違いなくオブジェクトが必要です。

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

今、あなたのコードの行に少し説明::/ g1ワットB

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. 

唯一の違いリファレンス付き

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

:リファレンスなし

g2は参考文献が名前であるnull

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

これは正しい答えです。 –

+2

これは受け入れられる回答である必要があります – wfunston

0

g1がオブジェクトで初期化されていることであるが、g2ポイント。オブジェクトはものです。実際には存在しないものであっても、物事には異なる名前を付けることができます。

あなたが実際にこのように、意味任意の「本物」にそれらを与えることなく、名前を宣言することができます。

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(); 

第1ステップ:g1が基準変数(ポインタ)であり、まだ有効なメモリ位置を指していません。

第2ステップ:第2ステップでクラスGUIのオブジェクトにメモリを割り当て、割り当て操作で参照変数g1がこのオブジェクト(メモリの場所)を指し示すようにします。 newキーワードは、クラスGUIのオブジェクトにメモリを割り当てます。

関連する問題