たくさんの使い方が考えられます Javaのこのキーワード 。 Java では、これは 参照変数 現在のオブジェクトを参照します。
Java this キーワードの使用法
Java this キーワードの 6 つの使用法を次に示します。
- これを使用して、現在のクラスのインスタンス変数を参照できます。
- これを使用して、現在のクラス メソッドを (暗黙的に) 呼び出すことができます。
- this() を使用して、現在のクラスのコンストラクターを呼び出すことができます。
- これはメソッド呼び出しの引数として渡すことができます。
- これはコンストラクター呼び出しの引数として渡すことができます。
- これを使用して、メソッドから現在のクラス インスタンスを返すことができます。
提案: Java の初心者の場合は、このキーワードの使用法を 3 つだけ調べてください。
1) this: 現在のクラスのインスタンス変数を参照します
this キーワードを使用して、現在のクラス インスタンス変数を参照できます。インスタンス変数とパラメータの間に曖昧さがある場合、このキーワードにより曖昧さの問題が解決されます。
このキーワードなしで問題を理解する
このキーワードを使用しない場合の問題を、以下の例で理解してみましょう。
複数行のコメントPowerShell
class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ rollno=rollno; name=name; fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis1{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }}今すぐテストしてください
出力:
0 null 0.0 0 null 0.0
上記の例では、パラメータ(仮引数)とインスタンス変数は同じです。したがって、このキーワードを使用してローカル変数とインスタンス変数を区別します。
このキーワードで上記問題を解決
class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ this.rollno=rollno; this.name=name; this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis2{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }}今すぐテストしてください
出力:
キャッチキャッチJavaを試してください
111 ankit 5000.0 112 sumit 6000.0
ローカル変数(仮引数)とインスタンス変数が異なる場合は、次のプログラムのようにこのキーワードを使用する必要はありません。
このキーワードが不要な番組
class Student{ int rollno; String name; float fee; Student(int r,String n,float f){ rollno=r; name=n; fee=f; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis3{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }}今すぐテストしてください
出力:
111 ankit 5000.0 112 sumit 6000.0
変数には意味のある名前を使用する方が良い方法です。そのため、リアルタイムではインスタンス変数とパラメータに同じ名前を使用し、常にこのキーワードを使用します。
2) this: 現在のクラスメソッドを呼び出す
this キーワードを使用して、現在のクラスのメソッドを呼び出すことができます。 this キーワードを使用しない場合、コンパイラはメソッドの呼び出し中にこのキーワードを自動的に追加します。例を見てみましょう
class A{ void m(){System.out.println('hello m');} void n(){ System.out.println('hello n'); //m();//same as this.m() this.m(); } } class TestThis4{ public static void main(String args[]){ A a=new A(); a.n(); }}今すぐテストしてください
出力:
hello n hello m
3) this() : 現在のクラスのコンストラクターを呼び出します。
this() コンストラクター呼び出しを使用して、現在のクラス コンストラクターを呼び出すことができます。コンストラクターを再利用するために使用されます。つまり、コンストラクターの連鎖に使用されます。
パラメーター化されたコンストラクターからデフォルトのコンストラクターを呼び出す:
class A{ A(){System.out.println('hello a');} A(int x){ this(); System.out.println(x); } } class TestThis5{ public static void main(String args[]){ A a=new A(10); }}今すぐテストしてください
出力:
hello a 10
デフォルトのコンストラクターからパラメーター化されたコンストラクターを呼び出す:
class A{ A(){ this(5); System.out.println('hello a'); } A(int x){ System.out.println(x); } } class TestThis6{ public static void main(String args[]){ A a=new A(); }}今すぐテストしてください
出力:
5 hello a
this() コンストラクター呼び出しの実際の使用法
コンストラクターからコンストラクターを再利用するには、 this() コンストラクター呼び出しを使用する必要があります。コンストラクター間のチェーンを維持します。つまり、コンストラクターのチェーンに使用されます。このキーワードの実際の使用法を示す以下の例を見てみましょう。
一般保護違反
class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this(rollno,name,course);//reusing constructor this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis7{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }}今すぐテストしてください
出力:
111 ankit java 0.0 112 sumit java 6000.0
ルール: this() の呼び出しは、コンストラクターの最初のステートメントである必要があります。
class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this.fee=fee; this(rollno,name,course);//C.T.Error } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis8{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }}今すぐテストしてください
出力:
Compile Time Error: Call to this must be first statement in constructor
4) this: メソッドの引数として渡す
this キーワードはメソッドの引数として渡すこともできます。主にイベント処理で使用されます。例を見てみましょう:
class S2{ void m(S2 obj){ System.out.println('method is invoked'); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } }今すぐテストしてください
出力:
method is invoked
引数として渡すことができるこれの応用:
イベント処理 (または) クラスの参照を別のクラスに提供する必要がある状況。 1 つのオブジェクトを多くのメソッドで再利用するために使用されます。
5) this: コンストラクター呼び出しの引数として渡す
コンストラクターで this キーワードを渡すこともできます。 1 つのオブジェクトを複数のクラスで使用する必要がある場合に便利です。例を見てみましょう:
C配列でのプログラミング
class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data);//using data member of A4 class } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } }今すぐテストしてください
Output:10
6) このキーワードは現在のクラス インスタンスを返すために使用できます。
このキーワードをメソッドからステートメントとして返すことができます。この場合、メソッドの戻り値の型はクラス型(非プリミティブ)でなければなりません。例を見てみましょう:
ステートメントとして返すことができる this の構文
return_type method_name(){ return this; }
メソッドからステートメントとして返されるこのキーワードの例
class A{ A getA(){ return this; } void msg(){System.out.println('Hello java');} } class Test1{ public static void main(String args[]){ new A().getA().msg(); } }今すぐテストしてください
出力:
Hello java
このキーワードを証明する
このキーワードが現在のクラス インスタンス変数を参照していることを証明してみましょう。このプログラムでは、参照変数を出力していますが、両方の変数の出力は同じです。
class A5{ void m(){ System.out.println(this);//prints same reference ID } public static void main(String args[]){ A5 obj=new A5(); System.out.println(obj);//prints the reference ID obj.m(); } }今すぐテストしてください
出力:
A5@22b3ea59 A5@22b3ea59