このJavaキーワードの手引き

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]から入手できます。