2012-04-17 15 views
1

次シングルトンクラスが正常に動作します私はreturn this.elvisreturn elvis;を変更すると、Javaのシングルトンクラスで "this"を使用しているのと比べて使用していませんか?

public class Elvis 
{ 
    private static Elvis elvis = new Elvis(); 

    private Elvis() 
    { 

    } 

    public static Elvis Instance() 
    { 
     return elvis; 
    } 
} 

はしかし、私はnon-static variable this cannot be referenced from a static contextを取得します。どうしてこれなの?

+3

スプーンがありません。 – user1329572

+3

'this'はオブジェクトインスタンスのコンテキストにのみ存在し、静的コンテキストには存在しません。 –

+0

静的コンテキストでは、 'this.elvis'の代わりに' Elvis.elvis'を使うことができます。 –

答えて

11

は、現在のオブジェクトインスタンスを参照します。 staticメソッドがオブジェクトに含まれていない場合は、そのクラスに含まれています。

1

「this」と「static」の2つのキーワードは、ある意味では嫌悪感があります。現在のオブジェクトのメンバーを参照しているとき、つまりオブジェクトを持っていて、おそらく非静的メンバーにアクセスしているときには、「this」を使用します。静的メンバー、関数、およびプロパティは、すべてのオブジェクトの「グローバル」であり、特定のオブジェクトに属するのではなく、クラス自体に属します。

長い歴史が不足しています。 "this"はのこのインスタンスを意味します。オブジェクトです。静的メンバーはどのインスタンスにも属しません。

関連する問題