1前書き

このチュートリアルでは、

__この

__Javaキーワードを見てみましょう。

Javaでは、**

this

keywordは、そのメソッドが呼び出されている現在のオブジェクトへの参照です。

キーワードの使用方法と使用時期について検討しましょう。


2フィールドシャドウイングの明確化

  • このキーワードは、ローカル変数からインスタンス変数を明確にするのに役立ちます。最も一般的な理由は、インスタンスフィールドと同じ名前のコンストラクタパラメータがある場合です。

public class KeywordTest {

    private String name;
    private int age;

    public KeywordTest(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

ここでわかるように、

this



name

および

age

インスタンスフィールドと共に使用しています – それらをパラメータと区別するためです。

もう1つの使用法は、ローカルスコープで

this

をパラメータの非表示またはシャドウイングと共に使用することです。使用例は

変数とメソッドの隠蔽

の記事にあります。


3同じクラスのコンストラクタを参照する

  • コンストラクタから、同じクラスの異なるコンストラクタを呼び出すために

    this()

    を使うことができます。ここでは、コードの使用量を減らすために

    this()

    をコンストラクタの連鎖に使用します。

最も一般的な使用例は、パラメータ化されたコンストラクタからデフォルトのコンストラクタを呼び出すことです。

public KeywordTest(String name, int age) {
    this();

   //the rest of the code
}

あるいは、引数のないコンストラクタからパラメータ化されたコンストラクタを呼び出し、いくつかの引数を渡すこともできます。

public KeywordTest() {
    this("John", 27);
}


this()

はコンストラクタの最初の文にする必要があります。そうしないとコンパイルエラーが発生します。


4

this

をパラメータとして渡す

ここに

printInstance()

メソッドがあります。ここでは、このKeyword__引数が定義されています。

public KeywordTest() {
    printInstance(this);
}

public void printInstance(KeywordTest thisKeyword) {
    System.out.println(thisKeyword);
}

コンストラクター内で、

printInstance()

メソッドを呼び出します。

this

では、現在のインスタンスへの参照を渡します。


5

this


を返す

  • メソッドから現在のクラスインスタンスを返すために

    this

    キーワードを使うこともできます。

コードを重複させないために、リンクにどのように実装されているかの完全な実例を示します。/creational-design-patterns[ビルダーデザインパターン]。


6. 内部クラス内の

this

キーワード

また、

this

を使用して、内部クラス内から外部クラスインスタンスにアクセスします。

public class KeywordTest {

    private String name;

    class ThisInnerClass {

        boolean isInnerClass = true;

        public ThisInnerClass() {
            KeywordTest thisKeyword = KeywordTest.this;
            String outerString = KeywordTest.this.name;
        }
    }
}

ここでは、コンストラクタ内で、

KeywordTest.this

call


.

__を使用して

KeywordTest

インスタンスへの参照を取得できます。さらに深く移動して、


KeywordTest.this.name

__fieldなどのインスタンス変数にアクセスできます。


7. 結論

この記事では、Javaの

this

キーワードを調べました。

いつものように、完全なコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-lang-oop[over on Github]から入手できます。