logo

тази ключова дума в Java

Може да има много употреба на Java тази ключова дума . В Java това е a референтна променлива който се отнася до текущия обект.

java тази ключова дума

Използване на Java тази ключова дума

Тук е дадено 6 използване на java тази ключова дума.

  1. това може да се използва за препращане към променлива на екземпляр на текущия клас.
  2. това може да се използва за извикване на метод на текущия клас (имплицитно)
  3. this() може да се използва за извикване на текущия конструктор на клас.
  4. това може да бъде предадено като аргумент в извикването на метода.
  5. това може да бъде предадено като аргумент в извикването на конструктора.
  6. това може да се използва за връщане на текущия клас от метода.

Внушение: Ако сте начинаещ в Java, потърсете само три употреби на тази ключова дума.

Използване на Java тази ключова дума

1) това: за препращане към променлива на екземпляр на текущия клас

Ключовата дума this може да се използва за препращане към променлива на екземпляр на текущия клас. Ако има неяснота между променливите и параметрите на екземпляра, тази ключова дума разрешава проблема с неяснотата.

Разбиране на проблема без тази ключова дума

Нека разберем проблема, ако не използваме тази ключова дума чрез примера, даден по-долу:

java отваряне на файл
 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(); }} 
Тествайте сега

Изход:

 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, компилаторът автоматично добавя тази ключова дума, докато извиква метода. Да видим примера

android.process.acore продължава да спира
 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(); }} 
Тествайте сега

Изход:

git команди за натискане
 Compile Time Error: Call to this must be first statement in constructor 

4) това: да се предаде като аргумент в метода

Ключовата дума 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 

Приложение на това, което може да бъде предадено като аргумент:

При обработка на събития (или) в ситуация, в която трябва да предоставим препратка на клас към друг. Използва се за повторно използване на един обект в много методи.


5) това: да се предаде като аргумент в извикването на конструктора

Можем да предадем тази ключова дума и в конструктора. Полезно е, ако трябва да използваме един обект в множество класове. Да видим примера:

хвърляне в sql
 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) тази ключова дума може да се използва за връщане на текущия клас

Можем да върнем тази ключова дума като израз от метода. В такъв случай върнатият тип на метода трябва да бъде типът на класа (непримитивен). Да видим примера:

Синтаксис на това, което може да бъде върнато като израз

 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