Šajā rakstā mēs uzzināsim par šo atslēgvārdu Java, kā un kur tos izmantot, izmantojot piemērus.
šo atslēgvārdu
Java valodā šis atslēgvārds tiek izmantots, lai atsauktos uz pašreizējo objekta metodi vai konstruktoru. Piemēram,
class Main ( int instVar; Main(int instVar)( this.instVar = instVar; System.out.println("this reference = " + this); ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("object reference = " + obj); ) )
Izeja :
šī atsauce = Main @ 23fc625e objekta atsauce = Main @ 23fc625e
Iepriekš minētajā piemērā mēs izveidojām objektu ar nosaukumu obj klases klases Main. Pēc tam mēs izdrukājam atsauci uz this
klases objektu obj un atslēgvārdu.
Šeit mēs varam redzēt, ka gan obj, gan atsauce this
ir vienāda. Tas nozīmē, ka tas nav nekas cits kā atsauce uz pašreizējo objektu.
Šī atslēgvārda izmantošana
Ir dažādas situācijas, kad this
parasti tiek izmantots atslēgvārds.
Izmantojot to neskaidrību mainīgo nosaukumos
Java valodā nav atļauts deklarēt divus vai vairākus mainīgos ar tādu pašu nosaukumu darbības jomā (klases darbības joma vai metodes darbības joma). Tomēr eksemplāru mainīgajiem un parametriem var būt tāds pats nosaukums. Piemēram,
class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )
Iepriekš minētajā programmā instances mainīgajam un parametram ir tāds pats nosaukums: vecums. Šeit Java sastādītājs ir sajaukts nosaukuma neskaidrības dēļ.
Šādā situācijā mēs izmantojam šo atslēgvārdu. Piemēram,
Vispirms apskatīsim piemēru, neizmantojot this
atslēgvārdu:
class Main ( int age; Main(int age)( age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )
Izeja :
mcage = 0
Iepriekš minētajā piemērā mēs 8
kā vērtību nodevām konstruktoram. Tomēr mēs iegūstam 0
kā rezultātu. Tas notiek tāpēc, ka Java kompilators sajaucas, jo nosaukumos ir neskaidrības starp mainīgo un parametru.
Tagad pārrakstīsim iepriekš minēto kodu, izmantojot this
atslēgvārdu.
class Main ( int age; Main(int age)( this.age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )
Izeja :
obj.age = 8
Tagad mēs iegūstam gaidīto produkciju. Tas ir tāpēc, ka, this
izsaucot konstruktoru , iekšpusē konstruktoru aizstāj objekta obj, kas izsaucis konstruktoru. Tādējādi vecuma mainīgajam tiek piešķirta 8. vērtība.
Turklāt, ja parametra un instances mainīgā nosaukums atšķiras, kompilators automātiski pievieno šo atslēgvārdu. Piemēram, kods:
class Main ( int age; Main(int i) ( age = i; ) )
ir ekvivalents:
class Main ( int age; Main(int i) ( this.age = i; ) )
tas ar Getters un Setters
Vēl viens this
atslēgvārda kopīgs lietojums ir klases iestatītāju un getteru metodes. Piemēram:
class Main ( String name; // setter method void setName( String name ) ( this.name = name; ) // getter method String getName()( return this.name; ) public static void main( String() args ) ( Main obj = new Main(); // calling the setter and the getter method obj.setName("Toshiba"); System.out.println("obj.name: "+obj.getName()); ) )
Izeja :
obj.nosaukums: Toshiba
Šeit mēs izmantojām this
atslēgvārdu:
- piešķirt vērtību setera metodes iekšienē
- lai piekļūtu vērtībai getter metodes iekšienē
Izmantojot to konstruktora pārslodzē
Strādājot ar konstruktora pārslodzi, mums var nākties izsaukt vienu konstruktoru no cita konstruktora. Šādā gadījumā mēs nevaram tieši piezvanīt konstruktoram. Tā vietā mums ir jāizmanto this
atslēgvārds.
Šeit mēs izmantojam citu šī atslēgvārda formu. Tas ir this()
,. Ņemsim piemēru,
class Complex ( private int a, b; // constructor with 2 parameters private Complex( int i, int j )( this.a = i; this.b = j; ) // constructor with single parameter private Complex(int i)( // invokes the constructor with 2 parameters this(i, i); ) // constructor with no parameter private Complex()( // invokes the constructor with single parameter this(0); ) @Override public String toString()( return this.a + " + " + this.b + "i"; ) public static void main( String() args ) ( // creating object of Complex class // calls the constructor with 2 parameters Complex c1 = new Complex(2, 3); // calls the constructor with a single parameter Complex c2 = new Complex(3); // calls the constructor with no parameters Complex c3 = new Complex(); // print objects System.out.println(c1); System.out.println(c2); System.out.println(c3); ) )
Izeja :
2 + 3i 3 + 3i 0 + 0i
Iepriekš minētajā piemērā mēs izmantojām this
atslēgvārdu,
- izsaukt konstruktoru
Complex(int i, int j)
no konstruktoraComplex(int i)
- izsaukt konstruktoru
Complex(int i)
no konstruktoraComplex()
Ievērojiet līniju,
System.out.println(c1);
Here, when we print the object c1, the object is converted into a string. In this process, the toString()
is called. Since we override the toString()
method inside our class, we get the output according to that method.
One of the huge advantages of this()
is to reduce the amount of duplicate code. However, we should be always careful while using this()
.
This is because calling constructor from another constructor adds overhead and it is a slow process. Another huge advantage of using this()
is to reduce the amount of duplicate code.
Note: Invoking one constructor from another constructor is called explicit constructor invocation.
Passing this as an Argument
We can use this
keyword to pass the current object as an argument to a method. For example,
class ThisExample ( // declare variables int x; int y; ThisExample(int x, int y) ( // assign values of variables inside constructor this.x = x; this.y = y; // value of x and y before calling add() System.out.println("Before passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); // call the add() method passing this as argument add(this); // value of x and y after calling add() System.out.println("After passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); ) void add(ThisExample o)( o.x += 2; o.y += 2; ) ) class Main ( public static void main( String() args ) ( ThisExample obj = new ThisExample(1, -2); ) )
Izeja :
Pirms nododat to metodei addTwo (): x = 1, y = -2 Pēc tam, kad esat to nodevis metodei addTwo (): x = 3, y = 0
Iepriekš minētajā piemērā konstruktora iekšpusē ThisExample()
pamaniet līniju,
add(this);
Šeit mēs saucam add()
metodi, nododot to kā argumentu. Tā kā šajā atslēgvārdā ir atsauce uz klases objekta obj, mēs varam mainīt x un y vērtību add()
metodes iekšienē .