Javaでこのキーワードを使用するにはどうすればよいですか?

青灯夜游
リリース: 2020-11-02 16:30:42
オリジナル
20060 人が閲覧しました

Java でのこのキーワードの使用法: 1. メンバー変数とローカル変数が同じ名前を持つ場合、これをメソッドで使用する場合、それはメソッドが配置されているクラスのメンバー変数を意味します。コンストラクターを使用すると、これを通じて同じクラス内の他のコンストラクターを呼び出すことができます; 3. これを使用して、複数のパラメーターを同時に渡すことができます。

Javaでこのキーワードを使用するにはどうすればよいですか?

関連する推奨事項: 「Java ビデオ チュートリアル

1. メンバー変数とローカル変数が重複する場合これをメソッドで使用する場合、メソッドが配置されているクラスのメンバー変数を参照します。 (これは現在のオブジェクト自体です)

public class Hello {
    String s = "Hello"; 
    public Hello(String s) {
       System.out.println("s = " + s);
       System.out.println("1 -> this.s = " + this.s);       
       this.s = s;//把参数值赋给成员变量,成员变量的值改变
       System.out.println("2 -> this.s = " + this.s);
    } 
    public static void main(String[] args) {
       Hello x = new Hello("HelloWorld!");
       System.out.println("s=" + x.s);//验证成员变量值的改变    }
}
ログイン後にコピー

結果は次のようになります:

s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
s=HelloWorld!
ログイン後にコピー

この例では、コンストラクター Hello で、パラメーター s はメンバー変数 s と同じ名前を持ちます。こんにちは、クラスの s を直接操作するとパラメータ s を操作することになります。 Helloクラスのメンバ変数を操作したい場合は参考にしてください。実行結果の最初の行は、コンストラクターに渡されたパラメーター s を直接出力します。2 行目は、メンバー変数 s を出力します。3 行目は、最初に渡されたパラメーター s の値をメンバー変数 s に代入してから、出力します。 , 結果はHelloWorld!となり、4行目ではmain関数内のクラス内のメンバー変数の値を直接出力しており、メンバー変数の値の変化も確認できます。

2. 自分自身をパラメータとして渡すとき、これを使用することもできます (これは現在のパラメータとして渡されます)

class A {
    public A() {
       new B(this).print();// 调用B的方法
    }
    public void print() {
       System.out.println("HelloAA from A!");
    }
}
class B {
    A a;
    public B(A a) {
       this.a = a;
    }
    public void print() {
       a.print();//调用A的方法
       System.out.println("HelloAB from B!");
    }
}
public class HelloA {
    public static void main(String[] args) {
       A aaa = new A();
       aaa.print();
       B bbb = new B(aaa);
       bbb.print();
    }
}
ログイン後にコピー

結果は次のようになります:

HelloAA from A!
HelloAB from B!
HelloAA from A!
HelloAA from A!
HelloAB from B!
ログイン後にコピー

この例ではたとえば、オブジェクト A のコンストラクターで new B(this) を使用して、オブジェクト A 自体をパラメーターとしてオブジェクト B のコンストラクターに渡します。

3. 場合によっては、イベント処理などの内部クラスや匿名クラスを使用します。これが匿名クラスで使用される場合、これは匿名クラスまたは内部クラス自体を指します。このとき、外部クラスのメソッドや変数を利用したい場合は、外部クラスのクラス名を追加する必要があります。例:

public class HelloB {
    int i = 1;
 
    public HelloB() {
       Thread thread = new Thread() {
           public void run() {
              for (int j=0;j<20;j++) {
                  HelloB.this.run();//调用外部类的方法
                  try {
                     sleep(1000);
                  } catch (InterruptedException ie) {
                  }
              }
           }
       }; // 注意这里有分号
       thread.start();
    }
 
    public void run() {
       System.out.println("i = " + i);
       i++;
    }
   
    public static void main(String[] args) throws Exception {
       new HelloB();
    }
}
ログイン後にコピー

上の例では、スレッドは匿名クラス オブジェクトであり、その定義では、その run 関数は外部クラスの run 関数を使用します。このとき、関数名が同じなので直接呼び出しても動作しません。このとき方法は2つあり、1つは外部実行関数の名前を変更する方法ですが、開発途中のアプリケーションではこの方法はお勧めできません。次に、この例のメソッドを使用して、外部クラスのクラス名とこの参照を使用して、外部クラスのメソッド run が呼び出されることを示すことができます。

4. コンストラクターでは、これを通じて同じクラス内の他のコンストラクターを呼び出すことができます。例:

public class ThisTest {
    ThisTest(String str) {
       System.out.println(str);
    }
    ThisTest() {
       this("this测试成功!");
    }
 
    public static void main(String[] args) {
       ThisTest thistest = new ThisTest();
    }
}
ログイン後にコピー

これの使用法をより正確に説明するために、別の例を示します:

public class ThisTest {
    private int age;
    private String str;
 
    ThisTest(String str) {
       this.str=str;
       System.out.println(str);
    }
    ThisTest(String str,int age) {
       this(str);
       this.age=age;
       System.out.println(age);
    }
 
    public static void main(String[] args) {
       ThisTest thistest = new ThisTest("this测试成功",25);
      
    }
}
ログイン後にコピー

結果は次のようになります:

this测试成功
25
ログイン後にコピー

これは注目に値します。 :
1: 構築中に別のコンストラクターを呼び出す場合は、呼び出しアクションを先頭に配置する必要があります。
2: コンストラクタ以外の関数ではコンストラクタを呼び出すことはできません。
3: コンストラクター内で呼び出せるコンストラクターは 1 つだけです。

5. これにより、複数のパラメータが同時に渡されます。

public class TestClass {
    int x;
    int y;
 
    static void showtest(TestClass tc) {//实例化对象
       System.out.println(tc.x + " " + tc.y);
    }
    void seeit() {
       showtest(this);
    }
 
    public static void main(String[] args) {
       TestClass p = new TestClass();
       p.x = 9;
       p.y = 10;
       p.seeit();
    }
}
ログイン後にコピー

結果は次のようになります。 コード内の

9 10
ログイン後にコピー

showtest(this) は、現在インスタンス化されている p を showtest() メソッドに渡し、実行します。

プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !

以上がJavaでこのキーワードを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート