2013-05-01 24 views
14

以下のコードで私を助けてください。エラーは次のとおりです。あなたは、静的メソッド(静的コンテキスト)でこれを使用することはできませんJavaでこれは静的コンテキストでは使用できません

public class Sample2 { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) 
    { 
     Sample2 sam=new Sample2(); 

     //Below code works fine 
     System.out.println(sam); 

     //Below code is displaying error 
     System.out.println(this); 
    } 
} 
+0

[static以外の変数は静的コンテキストから参照できません](http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static-コンテキスト) –

+0

[なぜ静的メソッドでこのキーワードを使用できないのですか?](http://stackoverflow.com/questions/11664522/why-cant-we-use-this-keyword-in-a-static -method) – fglez

+0

これは役に立つかもしれません - http://www.buggybread.com/2014/06/error-cannot-use-this-in-static-context.html –

答えて

21

を参照してください、「この」キーワードが原因exceution下にあるメソッドに現在のオブジェクトを参照します。として、クラスのインスタンスを使用して静的メソッドを呼び出すことはできません。そのため、 "this"は静的メソッドの上記の例では使用できません。なぜなら、現在のインスタンスを印刷しようとしていて、全く作成されていないからです。だから、私はあなたが得ているコンパイル時のエラーがあると思う。

+2

実際には、静的メソッドが宣言されているクラスのオブジェクトを使用して静的メソッドを呼び出すことができます。私たちは静的メソッドを呼び出す/使用することが非常に悪い方法であるため、これをしません:) –

+0

と私もMainActivity.thisを試しました – Prasad

0

を「静的コンテキストでこれを使用することはできません」。

Staticメソッドは、囲むクラスのインスタンスを指しません。

静的メソッドはとにかく

で「この」または「スーパー」のキーワードを参照することはできません彼らはthisをキーワードofficial docsでこのキーワード

+0

非静的メソッドはインスタンスを指していませんどちらか。 – EJP

15

はのインスタンスを指し、参照してください。クラス。静的コンテキストではインスタンスがないため、参照できません。詳細については

、この回答を参照してください。What is the meaning of "this" in Java?

+0

ああ。私は、 'sam'のオブジェクトリファレンスが 'this'で利用可能であると仮定しました。 "this"キーワードは、メソッドが実行されている現在のオブジェクトを参照していることを明確に示しています。 – Cyborgz

1

私たちが静的コンテキストからこれにアクセスしようとすると、コンパイラは今あなたが参照しているインスタンスを推測する方法を持っています。 mainは静的メソッドです。

関連する問題