-1

まず、これは単純でなければならないことを知っています。ここ、Stackoverflow.com、および Google で同様の質問を読み込もうとしていますが、それでもプログラムを動作させることができません。

私のプログラムがやろうとしていることの要約をすぐに書きました:

    public class One{

    public One(){
        Two t = new Two(this);
    }

    public void doSomething(){
        sout("HERE");
    }

    public static void main(String[] args){
        One o = new One()
        Two t = new Two(o);
    }

}

    public class Two{

        public Two(One o){
            One o = o;
            o.doSomething();
        }
    }

プログラムを実行すると、メソッド呼び出し o.doSomething() から NullPointerException が発生します。私はしばらくそれを修正しようとしてきましたが、私は困惑しています。誰かがすぐに修正を教えてくれれば、それは大歓迎です。

4

4 に答える 4

5
One o = o;

これが何を意味するのかわかりませんが、うまくいきません。これはメンバー変数 ( ) であるはずthis.oですか? これを行うには、関数の代わりにクラスに入れます。

public class Two{
    private One o;

    public Two(One o){
        this.o = o;
        o.doSomething();
    }
}

または、必要ない場合は完全に削除します。

public class Two{
    public Two(One o){
        o.doSomething();
    }
}
于 2013-03-05T20:20:40.867 に答える
0

メソッドsout("HERE")は存在しません。コンソールに何かを印刷しようとしている場合は、を使用する必要がありますSystem.out.println("HERE")

于 2013-03-05T20:18:59.910 に答える
0

あなたのクラスを変更しました。確認してください。動作するはずです

パブリッククラスワン{

public One(){
    Two t = new Two(this);
}

public void doSomething(){
    System.out.println("HERE");
}

public static void main(String[] args){
    One o = new One();
    Two t = new Two(o);
}  

}

public class Two{

    public Two(One one){
        One o = one; //just changed the parameter name to one
        o.doSomething();
    }
}
于 2013-03-05T20:22:54.177 に答える
0

「this」という単語は、現在のオブジェクトを参照する場合に使用されます。さらに、現在のオブジェクトの変数「something」にアクセスする場合は、「this.something」を使用できます。

たとえば、コードに挿入して、"this.o" (オブジェクトのプロパティ) と "o" (入力引数) を区別できます。

import java.io.*;


public class One{
    public One(){
        Two t = new Two(this);
    }

    public void doSomething(){
        System.out.println("HERE");
    }

    public static void main(String[] args){
        One o = new One();
        Two t = new Two(o);
    }
}


public class Two{
    One o;

    public Two(One o){
        this.o = o;
        this.o.doSomething();
    }
}

これにより、コンパイルされて出力が生成されます。

ここ

それはあなたが望むものですか?

于 2013-03-05T20:31:03.527 に答える