Code360 powered by Coding Ninjas X Naukri.com. Code360 powered by Coding Ninjas X Naukri.com
Table of contents
1.
Introduction
2.
'this' Reference in Java
3.
Usage of Java this Keyword
3.1.
Accessing Instance Variables
3.2.
Calling Instance Methods
3.3.
Passing 'this' as a Parameter
3.4.
Returning 'this' from Methods
3.5.
Using 'this' in Constructors
4.
Using 'this' Keyword to Refer to Current Class Instance Variables
5.
Using this() to Invoke Current Class Constructor
6.
Using 'this' Keyword to Return the Current Class Instance
7.
Using 'this' Keyword as a Method Parameter
8.
Using 'this' Keyword to Invoke the Current Class Method
9.
Using 'this' Keyword as an Argument in the Constructor Call
10.
Advantages of Using 'this' Keyword
10.1.
Clarity
10.2.
Constructor Chaining
10.3.
Method Chaining
10.4.
Passing Itself
11.
Disadvantages of Using 'this' Keyword
11.1.
Overuse
11.2.
Unnecessary Use
11.3.
Confusion in Static Contexts
12.
Frequently Asked Questions
12.1.
Can I use this in static methods?
12.2.
Is this necessary to access instance variables?
12.3.
Can this be used to refer to another object?
13.
Conclusion
Last Updated: Oct 3, 2024
Easy

this Keyword in Java

Author Rinki Deka
0 upvote

Introduction

Java has a special word, this, that we use a lot when we're writing code. Think of it as a way to point to the "current" thing we're working on, like marking a page in a book so we don't lose our place. It helps us tell the difference between two things that might have the same name but are actually different, like if two people named Alex were in the same room and we needed a way to make clear which Alex we're talking about. 

this Keyword in Java

In this article, we're going to look more closely at how this works, with some simple examples to make it easy to understand. We'll see how it can help us write better code and avoid mix-ups.

'this' Reference in Java

In Java, this is like a self-reference. It means "this object" or "the current object" we are talking about or working with. For example, when we are inside a class, and we want to talk about the current instance of that class, we use this. It's like when we look in the mirror, we are seeing "ourself." this does something similar in Java; it's a way for an object to see or refer to itself.

Let's say we have a class for a Book. Each book has a name. But, when we create a method inside this class to set the name of the book, we might get confused between the name we're trying to set and the name that's already part of the class. Here, this comes to the rescue. We can use this.name to clearly say we're talking about the name that belongs to this particular book, not some other name we're just using in our method.

Here's a simple example to show this:

class Book {
    String name;
void setName(String name) {
        this.name = name; // 'this.name' is the class variable, 'name' is the method parameter
    }
}


In this code, this.name points to the name of the book we're currently working with, making sure we're not mixing it up with the name we just got to set the book's name.

Usage of Java this Keyword

In Java, we use the this keyword in several ways to make our code clearer and to avoid confusion. It's like having a tool in your toolbox that you can use for different tasks. Let's look at some of the main ways we use this in Java programming.

Accessing Instance Variables

Sometimes, local variables (the ones we define inside a method) have the same name as instance variables (the ones defined at the class level). To tell them apart, we use this to refer to the instance variable. It's like saying, "I'm not talking about just any name, I'm talking about this object's name." For example : 

public class Car {
   private String model;
   public void setModel(String model) {
       this.model = model; // 'this.model' refers to the instance variable, 'model' refers to the local variable
   }
   public String getModel() {
       return model; // Here, 'this.' is implied
   }
}

Calling Instance Methods

Just like with variables, this can be used to call (or use) other methods within the same class. It's like saying, "use the method that belongs to this object." For example : 

public class Calculator {
   private int value;
   public void add(int other) {
       this.value += other;
   }
   public void subtract(int other) {
       this.add(-other); // Using 'this' to call another method in the same class
   }
}

Passing 'this' as a Parameter

Sometimes, we might want to pass the current object as an argument to another method. Using this, we can pass the current instance. It's like giving someone a reference to yourself. For example : 

public class Display {
   public void displayValue(Calculator calculator) {
       System.out.println("Calculator value: " + calculator.getValue());
   }
}
public class Calculator {
   private int value = 10;
   public void sendToDisplay(Display display) {
       display.displayValue(this); // Passing 'this' as an argument
   }
   public int getValue() {
       return this.value;
   }
}

Returning 'this' from Methods

In some cases, especially in method chaining or fluent interfaces, a method might return the current object. We do this by returning this. It's like saying, "after you're done with this task, come back to me." For example : 

public class Builder {
   private String name;
   public Builder setName(String name) {
       this.name = name;
       return this; // Returning 'this' for chaining
   }
   public Builder reset() {
       this.name = null;
       return this; // Returning 'this' for chaining
   }
}
// Usage:
Builder builder = new Builder();
builder.setName("Example").reset();

Using 'this' in Constructors

Constructors can use this to call other constructors within the same class. This is useful when you have multiple constructors with different parameters and you want to reuse one from another. It's like having a shortcut to initialize your object in different ways without repeating code. For example : 

public class Rectangle {
   private int width;
   private int height;
   public Rectangle() {
       this(0, 0); // Calling another constructor
   }
   public Rectangle(int width, int height) {
       this.width = width;
       this.height = height;
   }
}

Using 'this' Keyword to Refer to Current Class Instance Variables

When we write code in Java, we often deal with variables that hold values for us, like a box that can store something. In a class, which is like a blueprint for objects, we have special variables called instance variables. These variables are unique to each object made from the class, just like every student in a class has their own notebook.

Sometimes, when we write methods (which are like actions or things our objects can do), we use variables that have the same name as our instance variables. This can be confusing, like if two students in a class were both named Alex. How do we know which Alex we are talking about? In Java, we use this to make it clear we're talking about the instance variable, not the local variable in the method.

Here's a simple example to show what we mean:

class Student {
    String name; // This is an instance variable. It belongs to the object.
void updateName(String name) {
        this.name = name; // 'this.name' refers to the instance variable, 'name' is the method's parameter.
    }
}


In this example, this.name tells Java, "Hey, I'm talking about the name that belongs to this specific student, not the name you just gave me in the method." This way, we avoid confusion and make our code clear and easy to understand.

It's like making sure we know which Alex we're talking about by pointing directly at them. Using this makes our code much easier to read and understand, especially when lots of variables are involved.

Using this() to Invoke Current Class Constructor

In Java, a constructor is like a special method that sets up a new object when we create it. It's like when you get a new gadget and you set it up for the first time. Sometimes, we have more than one way to set up our object, which means we have more than one constructor in our class. Each constructor might set up the object in a slightly different way, depending on what we need.

Now, let's say we have a basic setup that all objects need, no matter how they're created. Instead of writing the same code in every constructor, we can write it once in one constructor and then call that constructor from the others. This is where this() comes in. It's like saying, "Hey, before you do anything else, go do the stuff in this other constructor first."

Here's a simple example to show you what we mean:

class Book {
    String title;
    String author;
// Constructor #1
    Book() {
        this("Unknown", "Unknown"); // Calls Constructor #2
    }
 // Constructor #2
    Book(String title, String author) {
        this.title = title;
        this.author = author;
    }
}


In this example, if we create a new Book without giving any details, Constructor #1 is used. But before it does anything else, it calls Constructor #2 using this("Unknown", "Unknown"), telling it to fill in "Unknown" for both the title and author. This way, we don't have to repeat the same code in both constructors. It makes our code cleaner and easier to manage.

Using this() to call another constructor is like having a main entrance and a side entrance to a building. No matter which entrance you use, you end up inside the building, ready to go.

Using 'this' Keyword to Return the Current Class Instance

Sometimes in Java, we write methods in our class that do something and then return the object itself. It's a bit like finishing a task and then saying, "Okay, what's next?" This can be really handy for making our code more connected and flowing, kind of like linking together a series of actions.

When we want to return the current object from a method, we use this. It's the way we tell Java, "I'm done with what you asked, and here I am." This can be useful when we're doing a bunch of operations on the same object and we want to keep things smooth and easy.

Here's a simple way to see how it works:

class Counter {
    int count = 0;
Counter increment() {
        this.count++; // Adds one to the count
        return this; // Returns the current Counter object
    }
}


In this example, we have a Counter class with a method called increment() that adds one to the count and then returns the current Counter object using this. This means after we call increment(), we can immediately call another method on the same Counter object without having to start over. It's like saying, "Add one, and let's keep going without stopping."

Using 'this' Keyword as a Method Parameter

In Java, we can also use the this keyword as a parameter when we're calling a method. It's like when we need to introduce ourselves to someone new; we use "I" or "me" to refer to ourselves. In the same way, this can be used to pass the current object into a method.

This can be useful when one object needs to tell another object about itself. It's like giving someone your contact info so they can reach you later.

Here's an example to make it clearer:

class Student {
    String name;
Student(String name) {
        this.name = name;
    }
void introduce(Student student) {
        System.out.println(this.name + " says hi to " + student.name);
    }
void meet(Student anotherStudent) {
        anotherStudent.introduce(this); // 'this' refers to the current object
    }
}


In this example, we have a Student class where each student can introduce themselves to another student. The meet method uses this to pass the current Student object into the introduce method of another student. It's like one student saying to another, "Let me introduce myself."

Using 'this' Keyword to Invoke the Current Class Method

In Java, we can use the this keyword to call other methods within the same class. It's like having a toolbox where this helps us pick the right tool for the job we're doing right now. This can be really handy for organizing our code and making sure we're using the right methods at the right times.

When we use this to call a method, it's like we're saying, "Use this object's version of the method." This is especially useful when we're dealing with multiple methods that might have similar names or functionalities but are used in different situations.

Here's a straightforward example:

class Painter {
    void paintWall() {
        preparePaint(); // We could just call the method directly
        this.applyPaint(); // But here we're explicitly using 'this' to call the method
    }

void preparePaint() {
        System.out.println("Preparing the paint");
    }
void applyPaint() {
        System.out.println("Applying the paint on the wall");
    }
}


In this Painter class, we have a paintWall method that prepares and then applies paint. By using this.applyPaint(), we're making it clear that we want to use the applyPaint method that belongs to this particular Painter object. It's like the painter saying, "I've got my paint ready, now I'm going to use my own method to apply it."

Using 'this' Keyword as an Argument in the Constructor Call

Sometimes in Java, we need one object to create another object of the same class. It's like when a team leader might need to add new members to the team. In these cases, we can use the this keyword as an argument when we're calling a constructor. This is a way to tell the new object, "Here's some important info from me that you'll need."

Using this in a constructor call allows us to pass the current state or some important information of the current object to the new object being created. It's like passing a baton in a relay race; the current runner (object) passes the baton (this) to the next runner (new object) so the race can continue smoothly.

Here's an example to explain this:

class Tree {
    String type;
    int age;
    Tree(String type, int age) {
        this.type = type;
        this.age = age;
    }
    Tree(Tree anotherTree) {
        this(anotherTree.type, anotherTree.age); // Using 'this' to call another constructor in the same class
    }
    void grow() {
        this.age += 1;
        System.out.println(type + " tree is now " + age + " years old.");
    }
}


In this Tree class, we have two constructors. The second constructor takes a Tree object as an argument and uses this to call the first constructor, passing along the type and age of the tree. This way, we can easily create a new tree that starts off with the same characteristics as an existing tree.

Using this like this helps us keep our code clean and avoids duplicating code, making it easier to read and maintain.

Advantages of Using 'this' Keyword

Using the this keyword in Java comes with some cool benefits that make our coding life a bit easier. Think of this as a helper that always points to the current object, making sure we're always on the right track. Let's break down some of the good stuff this brings to the table:

Clarity

This helps us tell the difference between instance variables (the variables that belong to an object) and parameters with the same name. It's like wearing a name tag at a big gathering, making it super clear who you are.

Constructor Chaining

With this, we can call one constructor from another within the same class. This is like having a shortcut that lets us reuse parts of our code, making everything more streamlined and tidy.

Method Chaining

This allows us to chain methods together. After one method finishes, this can help us jump straight to another method in the same object. It's like linking together a series of actions, making our code flow smoothly from one step to the next.

Passing Itself

Sometimes, our object needs to hand over a reference to itself to another method or object. this makes this super easy, like saying, "Here, use me for whatever you need."

These advantages make this a handy tool in our Java toolkit, helping us write code that's cleaner, clearer, and more efficient.

Disadvantages of Using 'this' Keyword

While the this keyword in Java is super useful, there are a couple of things we need to watch out for. It's like having a powerful tool; it's great when we need it, but sometimes it might not be the best choice for every situation. Here's what to keep in mind:

Overuse

If we use this too much, our code can start to look cluttered and confusing. It's like using too much of a good spice in cooking; a little bit enhances the flavor, but too much can overpower everything else.

Unnecessary Use

There are times when this isn't needed, but we might use it out of habit. This can make our code harder to read, like adding extra words to a sentence that don't really add anything to the meaning.

Confusion in Static Contexts

We can't use this in static methods because static methods belong to the class, not to any particular object. Trying to use this in a static method is like trying to use a personal ID card for a building that doesn't belong to anyone specific.

It's important to use this wisely, making sure it's adding value to our code and not just making things more complicated.

Frequently Asked Questions

Can I use this in static methods?

No, we can't use this in static methods. Static methods belong to the class, not an individual object, and this is all about the current object. It's like trying to use a personal ID for a building; it doesn't make sense because the building isn't a person.

Is this necessary to access instance variables?

Not always. We use this to clear up any confusion when local variables (like method parameters) have the same name as instance variables. If the names are different, we don't need this. It's only when we want to be super clear about which variable we're talking about.

Can this be used to refer to another object?

No, this always refers to the current object, the one we're working with right now. It's like using the word "me" in a conversation; it always refers to the person speaking.

Conclusion

In this article, we've walked through the ins and outs of the this keyword in Java, a small but mighty part of the language that helps keep our code clean and understandable. From distinguishing between instance variables and local variables to enabling constructor and method chaining, this plays a crucial role in Java programming.

Remember, this is all about context, pointing to the current object within a class. It's like having a guide in a new city, helping you navigate and understand where you are. But just like any tool or guide, it's important to use this wisely and not overdo it.

You can refer to our guided paths on the Coding Ninjas. You can check our course to learn more about DSADBMSCompetitive ProgrammingPythonJavaJavaScript, etc. Also, check out some of the Guided Paths on topics such as Data Structure and AlgorithmsCompetitive ProgrammingOperating SystemsComputer Networks, DBMSSystem Design, etc., as well as some Contests, Test Series, and Interview Experiences curated by top Industry Experts.
 

Live masterclass