Јава ово: Где и како се користи?

У овом чланку ћемо научити о овој кључној речи у Јави, како и где их користити уз помоћ примера.

ову кључну реч

У Јави се ова кључна реч користи за означавање тренутног објекта унутар методе или конструктора. На пример,

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

Излаз :

 ова референца = Маин @ 23фц625е референца објекта = Маин @ 23фц625е

У горњем примеру смо креирали објекат под називом обј класе Маин. Затим исписујемо референцу на објекат обј и thisкључну реч класе.

Овде можемо видети да је референца оба обј и thisиста. Значи да ово није ништа друго него референца на тренутни објекат.

Употреба ове кључне речи

Постоје разне ситуације у којима се thisкључна реч често користи.

Користећи ово за имена променљивих двосмислености

У Јави није дозвољено декларисање две или више променљивих са истим именом унутар опсега (опсег класе или опсег методе). Међутим, варијабле и параметри инстанце могу имати исто име. На пример,

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

У горњем програму променљива инстанце и параметар имају исто име: старост. Овде је Јава преводилац збуњен због двосмислености имена.

У таквој ситуацији користимо ову кључну реч. На пример,

Прво, погледајмо пример без употребе thisкључне речи:

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

Излаз :

 мц.аге = 0

У горњем примеру смо 8као вредност проследили конструктору. Међутим, добијамо 0као излаз. То је зато што се Јава преводилац збуњује због двосмислености имена између инстанце променљиве и параметра.

Сада, препишимо горњи код помоћу thisкључне речи.

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

Излаз :

 обј.аге = 8

Сада добијамо очекивани излаз. То је зато што када се конструктор позове, thisунутар конструктора се замењује објектом обј који је позвао конструктор. Отуда је променљивој старости додељена вредност 8.

Такође, ако се име параметра и променљиве инстанце разликује, преводилац аутоматски додаје ову кључну реч. На пример, код:

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

је еквивалентно са:

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

ово код Геттера и Сеттера

Друга уобичајена употреба thisкључне речи је у методама постављача и гетера класе. На пример:

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

Излаз :

 обј.наме: Тосхиба

Овде смо користили thisкључну реч:

  • за додељивање вредности унутар методе постављача
  • за приступ вредности унутар методе гетера

Користећи ово у Цонструцтор Оверлоадинг

Док радимо са преоптерећењем конструктора, можда ћемо морати да позовемо један конструктор из другог конструктора. У таквом случају не можемо експлицитно позвати конструктор. Уместо тога, морамо да користимо thisкључну реч.

Овде користимо другачији облик ове кључне речи. Односно this(). Узмимо пример,

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

Излаз :

 2 + 3и 3 + 3и 0 + 0и

У горњем примеру смо користили thisкључну реч,

  • да позове конструктор Complex(int i, int j)из конструктораComplex(int i)
  • да позове конструктор Complex(int i)из конструктораComplex()

Обратите пажњу на линију,

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

Излаз :

 Пре прослеђивања ове методе аддТво (): к = 1, и = -2 Након преношења ове методе аддТво (): к = 3, и = 0

У горњем примеру, унутар конструктора ThisExample(), приметите линију,

 add(this);

Овде позивамо add()методу предајући ово као аргумент. Пошто ова кључна реч садржи референцу на објекат класе класе, можемо променити вредност к и и унутар add()методе.

Занимљиви Чланци...