2012-02-16 4 views
-2

なぜコードがNULLポインタ例外をスローするのですか? 'this'を使用する意味は何ですか?私は初心者です、何か助けを大切にしてください。次の文脈でキーワード 'this'を使用する意味

// class Foobar 
private Foo f; 
void get(){ 
    this.getFoo().handle(); 
} 
public Foolish getFoo(){ 
    return this.f; 
} 
void handle(){ 
    System.out.println("handle of the intrf"); 
} 

// please note that 

public interface Foolish { 
    void handle(); 
} 

//main 
public static void main(String[] args) { 
    new Foobar().get(); 
+0

どのラインが投げていますか? – JaredPar

+0

???完全なスタックトレースを投稿してください。 – m0skit0

+0

完全なスタックトレースを表示してください – amit

答えて

1

理由は、タイプFooのメンバーfがどこかでnew Foo()、たとえば、に初期化されていないということですコンストラクタまたは宣言で宣言します。

この文脈でのthisへの言及は、 "オブジェクトそのもの"を意味します。曖昧さを取り除くものは何もないので、あなたのコードでは完全には必要ありません。

1

fnullであるためとhandle()getFoo()によって返された後、その上に呼び出されます。あなたがfooを初期化されることはありません

0

、次のようなものが必要、あなたは例外を取得

foo = new Foo(); 
+0

をチェックしてください。それは無限の再帰的コンストラクタの呼び出しを引き起こす – amit

0

これは、クラスFoobarの現在のインスタンスの変数fを返していることを意味します。ここでは、fがあいまいではないので(ローカル変数fが定義されていないため)、冗長です。

class A { 
    private int b = 1; 

    public int m() 
    { 
    int b = 2; 
    return b; // will return 2 
    } 
    public int n() 
    { 
    int b = 2; 
    return this.b; // will return 1 
    } 
1

それは「プライベートフー・F」のようには見えませんが、これまでthis.getFooが例外をスローします)「ヌルとnull'.handleを(返すように初期化されて考えてみましょう。

関連する問題