this keyword in java

Java has a lot of keyword like static keyword in java, final keyword in java, this keyword in java, super keyword in java, etc. In this post, we will discuss this keyword in java and use this keyword in java. this keyword is a reference variable that refers to the current object of the class. Many persons know it as this operator in java.  So, let’s see what this keyword is, how does it work, and this keyword in java with example.

As we know java is an object-oriented language, A application can have any number of objects. this keyword in Java is used to refer to the current object/instance or constructor of the class. It means we can access any class variable and method of the class by use of this keyword. The objective of this keyword is to eliminate the confusion when we have the same variable name for instance variables and local variables. There may be a situation when the class variables (instance variables) and parameters of the method have the same name.  

1. this keyword in java refers to the current class variable
2. this keyword in java
refers to the current class method
3. Used in constructor chaining
4. this as an argument in the method call
5. this as an argument in the constructor call
6. Using ‘this’ keyword to return the current class instance

this keyword in java

1. this keyword in java refers to the current class variable

In java, we can’t create two instance variables or two local variables with the same name. But we can create one instance variable and one local variable or method parameter with the same name. Now the question arises if we have instance variable and local variable with the same name then which one will be used and how compiler recognized that. So, to resolve this ambiguity this keyword comes in the role. It is also known as variable hiding.

this keyword in java is used to differentiate the instance variable and local variable or parameters of the method.

Firstly, we will do the code without this keyword and try to understand the problem. After that, we can understand the use or need of this keyword in java.

In this example, we have a class Student having some instance variables and one parameterized constructor to initialize the values of variables. In the parameterized constructor, we are taking the parameter name the same as with the same as instance variables. The compiler can’t make any difference in instance variables and parameters because both names are the same. Let’s see what the output will be :

public class Student
{
	String name;
	int rollNo;
	String className;
	
	Student(String name, int rollNo, String className)
	{
		name = name;
		rollNo = rollNo;
		className = className;
	}
	
	public void printData()
	{
		System.out.println("Name = "+name);
		System.out.println("Rollno = "+ rollNo);
		System.out.println("Class Name  = "+ className);
	}
	
	public static void main(String args[])
	{
		Student student =  new Student("Ram",5, "MCA");
		student.printData();
		
	}
}

Output:
Name = null
Rollno =  0
Class Name  = null

In the above example, The compiler is not able to make any difference between the instance variable and parameters of the constructor. It is assigning the value of parameters to local variables rather than the instance variable. Now we will do the same thing with this keyword.

public class Student
{
	String name;
	int rollNo;
	String className;
	
	Student(String name, int rollNo, String className)
	{
		this.name= name;
		this.rollNo = rollNo;
		this.className = className;
	}
	
	public void printData()
	{
		System.out.println("Name = "+name);
		System.out.println("Rollno = "+ rollNo);
		System.out.println("Class Name  = "+ className);
	}
	
	public static void main(String args[])
	{
		Student student =  new Student("Ram",5, "MCA");
		student.printData();
		
	}
}

Output:
Name = Ram
Rollno = 5
Class Name  = MCA

By using this keyword compiler differentiated the parameters and instance variables.

Let’s take another example of an instance variable and local variable. In this example, we are creating the instance variable and local variables with the same name. So when we use them and perform some operation then the compiler can’t differentiate them. Let’s see what the output will be:

public class ExampleOfThisKeyword 
{
	int a = 10 ;
	public static void main(String arg[])
    {
		ExampleOfThisKeyword obj = new ExampleOfThisKeyword();
		obj.showData();
    }
	public void showData() 
	{
		int a = 5;
		System.out.println("Value of a = " + a);
	}
}

Output: Value of a = 5

In the above example, you have seen the compiler always gives preference to local variables. To use the instance variable, we must use this keyword. Let’s see how we can use the instance variable:

public class ExampleOfThisKeyword 
{
	int a = 10 ;
	public static void main(String arg[])
    {
		ExampleOfThisKeyword obj = new ExampleOfThisKeyword();
		obj.showData();
    }
	public void showData() 
	{
		int a = 5;
		System.out.println("Value of a = " + this.a);
	}
}

Output: Value of a = 10

As you know we can’t access the non-static instance variable without the object. So, whenever we want to access them, we don’t need to create an object of class, we can use this keyword as you have seen in above example.

2. this keyword in java refers to the current class method

this keyword in java refers to the current object of the class. So if we want to invoke the method within the class you can use this keyword. By use of this keyword, you don’t need to create the object of the class.

public class Student
{
	String name;
	int rollNo;
	String className;
	
	Student(String name, int rollNo, String className)
	{
		this.name = name;
		this.rollNo = rollNo;
		this.className = className;
	}
	
	public void calulatedData()
	{
		System.out.println("This method is called by using of this keyword");
	}
	
	public void printData()
	{
		System.out.println("Name = "+ name);
		System.out.println("Rollno = "+ rollNo);
		System.out.println("Class Name  = "+ className);
		this.calulatedData();
	}
	
	public static void main(String args[])
	{
		Student student =  new Student("Ram",5, "MCA");
		student.printData();
		
	}
}

Output:
Name = Ram
Rollno = 5
Class Name  = MCA
This method is called by using this keyword

NOTE: If you don’t use this keyword, the compiler automatically adds this keyword while invoking the method.

An important point to refer current class variable

We can’t use this keyword in a static block or static method. Because the static block or static method always binds with the class rather than objects. You have discussed it in the separate post you can read it from here (Restriction on this keyword) If you try to use this keyword in a static block or static method it will show compilation error.

public class ExampleOfThisKeyword 
{
    int a = 10 ;
    
    public static void setData(int a)
    {
    	this.a = a;
    }
    public void showData() 
    {
        System.out.println("Value of a = " + this.a);
    }
    public static void main(String arg[])
    {
        ExampleOfThisKeyword obj = new ExampleOfThisKeyword();
        setData(5);
        obj.showData();
    }
}

Output: Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Cannot use this in a static context at ExampleOfThisKeyword.setData(ExampleOfThisKeyword.java:7)
at ExampleOfThisKeyword.main(ExampleOfThisKeyword.java:16)

3. Used in constructor chaining

Please read the constructor chaining first after that you can understand it better. By use of this keyword, we can invoke the constructors.
Note: this keyword should be in the first line whenever you want to call a constructor. It is used in the chaining of a constructor. You can read it here.

public class Student
{
	String name;
	int rollNo;
	String className;
	
	Student(String name)
	{
		System.out.println("This constructor is called by using of this keyword");
		System.out.println("The name of Student = " + name);
	}
	
	Student(String name, int rollNo, String className)
	{
		this(name);
		this.name = name;
		this.rollNo = rollNo;
		this.className = className;
	}
	
	public void printData()
	{
		System.out.println("Name = "+ name);
		System.out.println("Rollno = "+ rollNo);
		System.out.println("Class Name  = "+ className);
	}
	
	public static void main(String args[])
	{
		Student student =  new Student("Ram",5, "MCA");
		student.printData();
		
	}
}

Output:
This constructor is called by using of this keyword
The name of Student = Ram
Name = Ram
Rollno = 5
Class Name  = MCA

4. this as an argument in the method call

this keyword refers the current object of class. If you want to perform some operation by use of object you can use this keyword. In below example we want to print the details of each object so we can simply pass this keyword in method.

public class Student
{
	String name;
	int rollNo;
	String className;
	
	Student(String name, int rollNo, String className)
	{
		this.name = name;
		this.rollNo = rollNo;
		this.className = className;
	}
	
	public void printData()
	{
		System.out.println("Name = "+ name);
		System.out.println("Rollno = "+ rollNo);
		System.out.println("Class Name  = "+ className);
		printInfo(this);
	}
	
	public void printInfo(Student student) 
	{
		System.out.println("New studnent name: "+ student.name + " and Rollno :" + student.rollNo);
	}
	
	public static void main(String args[])
	{
		Student student =  new Student("Ram",5, "MCA");
		student.printData();
	}
}

Output:
Name = Ram
Rollno = 5
Class Name  = MCA
New studnent name: Ram and Rollno :5

5. this as an argument in the constructor call

As like method call we can pass this as an argument in the constructor call. We can pass this keyword in constructor also it is very similar to the method.

class Data
{  
  Record obj;  
  Data(Record obj)
  {  
    this.obj=obj;  
  }  
  void display()
  {  
    System.out.println(obj.data);//using data member of Record class  
  }  
}  
  
class Record
{  
  int data=10;  
  Record()
  {  
   Data b=new Data(this);  
   b.display();  
  }  
  public static void main(String args[])
  {  
   Record a=new Record();  
  }  
}  

Output: 10

6. Using ‘this’ keyword to return the current class instance

We can use the this keyword, where we want to return the current object.
In the below example, we are creating getInstance() method that returns the object of the class.

public class Student
{
	String name;
	int rollNo;
	String className;
	
	Student(String name, int rollNo, String className)
	{
		this.name = name;
		this.rollNo = rollNo;
		this.className = className;
	}
	
	public void printData()
	{
		System.out.println("Name = "+ name);
		System.out.println("Rollno = "+ rollNo);
		System.out.println("Class Name  = "+ className);
	}
	
	public Student getInstance() 
	{
		return this;
	}
	
	public static void main(String args[])
	{
		Student student =  new Student("Ram",5, "MCA");
		student.getInstance().printData();
	}
}

Output:
Name = Ram
Rollno = 5
Class Name  = MCA

2 thoughts on “this keyword in java”

Leave a Comment