- Java this Keyword
- this with Getters and Setters
- Using this in Constructor Overloading
- Passing this as an Argument
- Table of Contents
- Пример первый — у переменной экземпляра и метода одинаковые имена
- Пример второй — Применение this для явного вызова конструктора
- this Keyword in Java: What is & How to use with Example
- Understand ‘this’ keyword with an example.
Java this Keyword
In the above program, the instance variable and the parameter have the same name: age. Here, the Java compiler is confused due to name ambiguity.
In such a situation, we use this keyword. For example,
First, let’s see an example without using this keyword:
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 java-exec">class Main < int age; Main(int age)< this.age = age; >public static void main(String[] args) Now, we are getting the expected output. It is because when the constructor is called, this
inside the constructor is replaced by the object obj that has called the constructor. Hence the age variable is assigned value 8.
Also, if the name of the parameter and instance variable is different, the compiler automatically appends this keyword. For example, the code:
class Main < int age; Main(int i) < age = i; >>
this with Getters and Setters
Another common use of this keyword is in setters and getters methods of a class. For example:
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()); >>
Here, we have used this keyword:
Using this in Constructor Overloading
While working with constructor overloading, we might have to invoke one constructor from another constructor. In such a case, we cannot call the constructor explicitly. Instead, we have to use this keyword.
Here, we use a different form of this keyword. That is, this() . Let's take an example,
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); >>
In the above example, we have used this keyword,
- to call the constructor Complex(int i, int j) from the constructor Complex(int i)
- to call the constructor Complex(int i) from the constructor Complex()
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,
Table of Contents
Ключевое слово this
- Когда у переменной экземпляра класса и переменной метода/конструктора одинаковые имена;
- Когда нужно вызвать конструктор одного типа (например, конструктор по умолчанию или параметризированный) из другого. Это еще называется явным вызовом конструктора.
Вот и все, на самом деле не так много, — всего два случая, когда применяется это страшное ключевое слово. Теперь давайте рассмотрим эти две ситуации на примерах.
Пример первый — у переменной экземпляра и метода одинаковые имена
и получается, что вы просто присваиваете значение переменной name из этого метода, ей же. Что конечно не имеет никакого смысла. Поэтому нужен был какой-то способ, чтобы отличить переменную name из класса Human , от переменной name из метода setName .Для решения этой проблемы и было введено ключевое слово this , которое в данном случае укажет, что нужно вызывать переменную не метода, а класса Human :
То есть this сошлется на вызвавший объект, как было сказано в начале статьи. В результате чего имя человека через сеттер setName будет установлено создаваемому объекту. Ниже приведен программный код без использования ключевого слова this . В коде создается объект класса Human и присваивается ему имя:
public class Solution < public static void main(String[] args) < Human human1 = new Human(); human1.setName("Volodya"); human1.print(); >> class Human < String name; public String getName() < return name; >public void setName(String name) < this.name = name; >void print() < System.out.println(name); >>
Таким образом, здесь this позволяет не вводить новые переменные для обозначения одного и того же, что позволяет сделать код менее «перегруженным» дополнительными переменными.
Пример второй — Применение this для явного вызова конструктора
Вызов одного конструктора из другого может пригодиться тогда, когда у вас (как ни странно) несколько конструкторов и вам не хочется в новом конструкторе переписывать код инициализации, приведенный в конструкторе ранее. Запутал? Все не так страшно как кажется. Посмотрите на код ниже, в нем два конструктора класса Human :
class Human < int age; int weight; int height; Human(int age, int weight)< this.age = age; this.weight = weight; >Human(int age, int weight, int height) < //вы вызываете конструктор с двумя параметрами this(age, weight); //и добавляете недостающую переменную this.height = height; >>
Здесь у нас сначала приводится конструктор с двумя параметрами, который принимает int age и int weight . Допустим, мы написали в нем две строчки кода:
this.age = age; this.weight = weight;
а потом решили добавить еще один конструктор, с тремя параметрами, который помимо возраста и веса принимает еще и рост. В новом конструкторе вы бы могли написать так:
this.age = age; this.weight = weight; this.height = height;
Но вместо того, чтобы повторять уже написанный ранее код в этом конструкторе, вы можете с помощью ключевого слова this явно вызвать конструктор с двумя параметрами:
this(age, weight); // и дописываете недостающую переменную: this.height = height;
- вызови this (этот) конструктор, который имеет два параметра.
- и добавить недостающую переменную.
this Keyword in Java: What is & How to use with Example
this keyword in Java is a reference variable that refers to the current object of a method or a constructor. The main purpose of using this keyword in Java is to remove the confusion between class attributes and parameters that have same names.
Following are various uses of ‘this’ keyword in Java:
- It can be used to refer instance variable of current class
- It can be used to invoke or initiate current class constructor
- It can be passed as an argument in the method call
- It can be passed as argument in the constructor call
- It can be used to return the current class instance
Click here if the video is not accessible
Understand ‘this’ keyword with an example.
- Class: class Account
- Instance Variable: a and b
- Method Set data: To set the value for a and b.
- Method Show data: To display the values for a and b.
- Main method: where we create an object for Account class and call methods set data and show data.
Let’s compile and run the code
Our expected output for A and B should be initialized to the values 2 and 3 respectively.
But the value is 0, Why? Let investigate.
In the method Set data, the arguments are declared as a and b, while the instance variables are also named as a and b.
During execution, the compiler is confused. Whether “a” on the left side of the assigned operator is the instance variable or the local variable. Hence, it does not set the value of ‘a’ when the method set data is called.
The solution is the “this” keyword
Append both ‘a’ and ‘b’ with the Java this keyword followed by a dot (.) operator.
During code execution when an object calls the method ‘setdata’. The keyword ‘this’ is replaced by the object handler “obj.” (See the image below).
So now the compiler knows,
- The ‘a’ on the left-hand side is an Instance variable.
- Whereas the ‘a’ on right-hand side is a local variable
The variables are initialized correctly, and the expected output is shown.
Suppose you are smart enough to choose different names for your instance variable and methods arguments.
But this time around, you create two objects of the class, each calling the set data method.
How the compiler will determine whether it is supposed to work on instance variable of object 1 or object 2.
Well, the compiler implicitly appends the instance variable with “this” keyword (image below).
Such that when object 1 is calling the set data method, an instance variable is appended by its reference variable.
While object 2 is calling the set data method, an instance variable of object 2 is modified.
This process is taken care by the compiler itself. You don’t have to append ‘this’ keyword explicitly unless there is an exceptional situation as in our example.
Example: To learn the use “this” keyword
Step 1) Copy the following code into a notepad.