Java this: kus ja kuidas seda kasutada?

Sellest artiklist saame teada selle Java märksõna kohta, kuidas ja kus neid näidete abil kasutada.

see märksõna

Java-s kasutatakse seda märksõna meetodi või konstruktori sees oleva praeguse objekti tähistamiseks. Näiteks,

 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); ) )

Väljund :

 see viide = Main @ 23fc625e objekti viide = Main @ 23fc625e

Ülalolevas näites lõime objekti nimega objekt Main. Seejärel printime viite objekti objektile ja thisklassi märksõnale.

Siin näeme, et mõlema obj ja viide thison sama. See tähendab, et see pole midagi muud kui viide praegusele objektile.

Selle märksõna kasutamine

thisMärksõna kasutatakse tavaliselt erinevates olukordades .

Selle kasutamine mitmetähenduslikkuse muutujate nimede jaoks

Java-s ei ole lubatud deklareerida kahte või enamat sama nimega muutujat toimimisala sees (klassi ulatus või meetodi ulatus). Ent eksemplaride muutujatel ja parameetritel võib olla sama nimi. Näiteks,

 class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )

Ülaltoodud programmis on eksemplari muutuja ja parameetri nimi sama: vanus. Siin on Java kompilaator segaduses nimede ebaselguse tõttu.

Sellises olukorras kasutame seda märksõna. Näiteks,

Kõigepealt vaatame näidet thismärksõna kasutamata :

 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); ) )

Väljund :

 mcage = 0

Ülaltoodud näites oleme 8väärtusena edastanud konstruktori. Kuid me saame 0väljundiks. Seda seetõttu, et Java kompilaator läheb segadusse nimede ebaselguse tõttu muutuja ja parameetri vahel.

Kirjutame nüüd ülaltoodud koodi thismärksõna abil ümber .

 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); ) )

Väljund :

 obj.age = 8

Nüüd saame oodatud väljundi. Sellepärast, et kui kutsutakse thiskonstruktorit, asendatakse konstruktori sees objekti objekt, mis on kutsunud konstruktori. Seega omistatakse vanusemuutujale väärtus 8.

Kui parameetri ja eksemplari muutuja nimi on erinev, lisab kompilaator selle märksõna automaatselt. Näiteks kood:

 class Main ( int age; Main(int i) ( age = i; ) )

on samaväärne järgmisega:

 class Main ( int age; Main(int i) ( this.age = i; ) )

seda Getters ja Setters

Teine levinud thismärksõna kasutus on klassi setter- ja getters-meetodites. Näiteks:

 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()); ) )

Väljund :

 obj.nimi: Toshiba

Siin oleme kasutanud thismärksõna:

  • väärtuse määramiseks setter-meetodi sees
  • väärtuse saamiseks getter-meetodi sees

Selle kasutamine konstruktori ülekoormamisel

Konstruktori ülekoormusega töötades peame võib-olla kutsuma ühe konstruktori teisest konstruktorist. Sellisel juhul ei saa me konstruktorit selgesõnaliselt helistada. Selle asemel peame kasutama thismärksõna.

Siin kasutame selle märksõna erinevat vormi. See tähendab, et this(). Võtame näite,

 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); ) )

Väljund :

 2 + 3i 3 + 3i 0 + 0i

Ülaltoodud näites oleme kasutanud thismärksõna

  • et helistada Complex(int i, int j)konstruktoriltComplex(int i)
  • et helistada Complex(int i)konstruktoriltComplex()

Pange tähele joont,

 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); ) )

Väljund :

 Enne selle edastamist meetodile addTwo (): x = 1, y = -2 Pärast selle edastamist meetodile addTwo (): x = 3, y = 0

Ülaltoodud näites märkage konstruktori sees ThisExample()joont,

 add(this);

Siin nimetame add()meetodit, edastades selle argumendina. Kuna see märksõna sisaldab viidet klassi objekti objektile, saame add()meetodi sees muuta x ja y väärtust .

Huvitavad Artiklid...