これは、クラス インスタンス自体を表すためにクラス内で使用されます。
このキーワードはクラス内でのそれ自体への参照であり、これによりクラス内のメソッドがその独自のプロパティにアクセスしやすくなります。
java での this の使用法
1. ローカル変数とメンバー変数が同じ名前の場合、メソッド内でこれを使用します。 . 区別するメンバー変数。
class Demo{ String str = "这是成员变量"; void fun(String str){ System.out.println(str); System.out.println(this.str); this.str = str; System.out.println(this.str); } } public class This{ public static void main(String args[]){ Demo demo = new Demo(); demo.fun("这是局部变量"); } }
分析: 上記のクラス Demo にはメンバー変数 str とローカル変数 str (クラスメソッドの仮パラメーター) があり、ローカル変数とメンバー変数が同じ名前であることは明らかです。このとき、通常、メソッド内で str を直接使用すると、実際にはローカル変数 str が使用されますが、メンバー変数 str には影響しません。このとき、メンバー変数で何かを行う必要がある場合は、this を使用する必要があります。キーワード。
質問なのですが、メソッド内に str がない場合、メソッド内でメンバー変数 str を使用するとどうなりますか?実際、メソッド内のすべての操作はメンバー変数 str に対して実行されます。 『Javaプログラミング考』の84ページ中段に、メソッド内で同じクラスの別のメソッドを呼び出す場合は、これを使用する必要はありませんという一文があります。同様に、メソッド内に同じ名前のローカル変数とメンバー変数がない場合、このメソッドでメンバー変数を使用するときにこれを使用する必要はなく、次のコードを実行して確認できます。
class Demo{ String str = "这是成员变量"; void fun(String str1){ System.out.println(str1); System.out.println(str); } } public class This{ public static void main(String args[]){ Demo demo = new Demo(); demo.fun("这是局部变量"); } }
2. このキーワードは、現在のオブジェクトを他のメソッドに渡します
ここには非常に古典的な例があり、『Java Programming Thoughts』の 85 ページにある例です。取り出してじっくり調べてみましょう。
class Person{ public void eat(Apple apple){ Apple peeled = apple.getPeeled(); System.out.println("Yummy"); } } class Peeler{ static Apple peel(Apple apple){ //....remove peel return apple; } } class Apple{ Apple getPeeled(){ return Peeler.peel(this); } } public class This{ public static void main(String args[]){ new Person().eat(new Apple()); } }
これは私自身の理解です。正しくない可能性があります。本の内容を参照してください: Apple は Peeler.peel() メソッドを呼び出す必要があります。何らかの理由で Apple の外部に配置する必要がある操作を実行する外部ユーティリティ メソッド (おそらく、その外部メソッドが多くの異なるクラスに適用され、コードを複製したくないため)。自分自身を外部メソッドに渡すには、this キーワードを使用する必要があります。
分析: シナリオを想像してください。さまざまな果物の皮をむく作業が同じであれば、果物を与えていただければ、私も同じ方法で皮をむきます。次に、上記の例と組み合わせると、フルーツが渡されます。 getPeeled() を実行する前に、このフルーツをパラメーターとして外部の peel() に渡し、これを使用してそれ自体を表し、外部メソッドに渡す必要があります。
3. 現在のオブジェクトへの参照を返す必要がある場合、多くの場合、メソッドに return this を記述します。
このアプローチの利点は次のとおりです。オブジェクトを使用して呼び出す このメソッドは変更されたオブジェクトを返し、そのオブジェクトを使用して他の操作を実行できます。したがって、オブジェクトに対して複数の操作を簡単に実行できます。
public class This{ int i = 0; This increment(){ i += 2; return this; } void print(){ System.out.println("i = " + i); } public static void main(String args[]){ This x = new This(); x.increment().increment().print(); } }
結果は:
4
4. コンストラクターでコンストラクターを呼び出すときは、これを使用する必要があります
クラスには多数のコンストラクターがありますコードの重複を避けるために、1 つのコンストラクター内で他のコンストラクターを呼び出したい場合は、this キーワードを使用できます。 Java プログラミングの考え方には次のような格言があります。通常、これを記述するときは、「このオブジェクト」または「現在のオブジェクト」を指し、それ自体が現在のオブジェクトへの参照を表します。コンストラクター内で、これにパラメーター リストを追加すると、意味が異なります。これにより、この引数リストに一致するコンストラクターが明示的に呼び出され、他のコンストラクターを呼び出すための直接パスが提供されます。
慎重な分析:
main 関数から開始して、new Flower() はメモリ内にスペースを割り当て、オブジェクトを初期化します。コンストラクターを呼び出します。ここではパラメーターは書き込まれません。もちろん、パラメーターなしのコンストラクターであるデフォルトのコンストラクターが呼び出されます。
このパラメーターなしコンストラクターのコードの最初の行は this("hi",122) です。これが意味するのは、パラメーターなしコンストラクターは 2 つのパラメーターを指定してコンストラクターを呼び出し、2 パラメーターのコンストラクターの場合、コードの最初の行は this(s) です。このコード行は 1 つのパラメーターを持つコンストラクターと自動的に照合し、Fflower(String ss) が照合し、両方とも String 型パラメーターであることがわかります。
次に、String 型パラメーターを持つコンストラクターが呼び出され、次のように出力されます: String 型パラメーターのみを持つコンストラクター s = hi
; その後、前のレベルに戻って関数を呼び出します。 with 2 つのパラメーターを持つコンストラクターは、次のように出力します: String および int 型のパラメーターを持つコンストラクター
; パラメーターのないコンストラクターである前のレベルに戻り、次のように出力します: Default constructionor
。
この時点で、コンストラクターは新しく作成されたオブジェクトを初期化し、最終的に main 関数のコードの最後の行に petalCount=122 s=hi
を出力します。
絵を描いてもっとはっきりと見てみましょう。
注意すべき点がいくつかあります:
1、これは 1 つのコンストラクターのみを呼び出すことができ、同時に 2 つを呼び出すことはできません。 1 つのコンストラクター コンストラクター;
2, 呼び出すコンストラクターは先頭に置く必要があります。これは、1 つのコンストラクターで 2 つのコンストラクターを呼び出すことができない理由も説明しており、2 番目のコンストラクターを先頭に置くことはできません。
3. この例では、2 つのパラメーターを持つコンストラクターで、これを使用して 1 つのパラメーターだけを持つ他のコンストラクターを呼び出すことができます。
4. コンストラクター以外のメソッドでコンストラクターを呼び出すために使用することはできません。コード内のコメントを正しくコンパイルできません。
#この概要
1. 現在のオブジェクトへの参照を示します。 2. 関数パラメーターの代わりにクラス メンバー変数を使用することを示します。 3. コンストラクター内で指定されたパラメーターの型を満たすコンストラクターを参照するために使用されます (実際にはコンストラクターでもあります)。ただし、ここでは非常に注意する必要があります。参照できるコンストラクターは 1 つだけであり、それは先頭になければなりません。 4. これは現在のオブジェクトを参照し、static にはオブジェクトがないため、これを静的メソッドで使用することはできません。 php 中国語 Web サイト、無料のJava 入門チュートリアル が多数あり、オンラインで学習することを歓迎します。
以上がこれはJavaでは何を意味するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。