3

thisキーワードを入力パラメーターとして 渡したコードを見てきました。例えば:

getContainer(this);

キーワードのthis意味は?クラス自体のインスタンス (またはその線に沿ったもの) を参照していると聞きましたが、それはどのように機能しますか?

4

4 に答える 4

4

Java仕様の15.8.3から:

キーワード this は、インスタンス メソッドの本体、インスタンス初期化子またはコンストラクター、またはクラスのインスタンス変数の初期化子でのみ使用できます。それ以外の場所にある場合は、コンパイル時エラーが発生します。一次式として使用される場合、キーワード this は、インスタンス メソッドが呼び出されたオブジェクト (§15.12) または構築中のオブジェクトへの参照である値を示します。this の型は、キーワード this が発生するクラス C です。実行時に参照される実際のオブジェクトのクラスは、クラス C または C のサブクラスである可能性があります。

[...]

キーワード this は、特別な明示的なコンストラクター呼び出しステートメントでも使用され、コンストラクター本体の先頭に表示できます (§8.8.7)。

そうです、クラスは this キーワードを使用してそれ自体を参照できます。このthisキーワードは、メソッド内のローカル変数がクラス メンバー変数と同じ名前を持つ場合にも必要であり、両者を区別します。

于 2012-06-29T05:37:46.950 に答える
2

thisメソッドが呼び出された現在のインスタンスを参照し、

したがって、そのメンバーメソッドを呼び出す現在のインスタンスへの参照を渡します

class MyRunnable implements Runnable {
    Thread t;
    public MyRunnable() {
        this.t = new Thread(this); //here it passes reference to current instance of `Runnable`
    }

    public void run() {

    }
}
于 2012-06-29T04:44:38.127 に答える
1

this呼び出し元クラスのインスタンスを呼び出し先クラスに渡すために渡すこともできます。例えば

public class Caller{
        public void callerClassMethod1(){
            new Called(this).
        }

        public void callerClassMethod2(){
        }
    }

class Called{
    private Caller caller;
    public Called(Caller caller){
       this.caller=caller;
    }
    public void calledClassMethod1(){
        //.... Do something before
        caller.callerClassMethod2();
        //..... Do something after        

    }
}

このようにして、2 つのクラスの責任を分離し、同時にそれらを結合したままにすることができます。

于 2014-10-01T04:31:08.520 に答える
-2

Java にはクラスがあり、それらのクラスのインスタンス (オブジェクト) を作成します。したがって、オブジェクトがそれ自体を指すか参照する必要がある場合は、thisキーワードが使用されます。

于 2012-06-29T05:03:07.877 に答える