1. Introduction

In this tutorial, we’ll take a look at the this Java keyword.

In Java, this keyword is a reference to the current object whose method is being called.

Let’s explore how and when we can use the keyword.

2. Disambiguating Field Shadowing

The keyword is useful for disambiguating instance variables from local parameters. The most common reason is when we have constructor parameters with the same name as instance fields:

public class KeywordTest {

    private String name;
    private int age;
    
    public KeywordTest(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

As we can see here, we’re using this with the name and age instance fields – to distinguish them from parameters.

Another usage is to use this with the parameter hiding or shadowing in the local scope. An example of use can be found in the Variable and Method Hiding article.

3. Referencing Constructors of the Same Class

From a constructor, we can use this() to call a different constructor of the same class. Here, we use this() for the constructor chaining to reduce the code usage.

The most common use case is to call a default constructor from the parameterized constructor:

public KeywordTest(String name, int age) {
    this();
    
    // the rest of the code
}

Or, we can call the parameterized constructor from the no argument constructor and pass some arguments:

public KeywordTest() {
    this("John", 27);
}

Note, that this() should be the first statement in the constructor, otherwise the compilation error will occur.

4. Passing this as a Parameter

Here we have printInstance() method, where the this Keyword argument is defined:

public KeywordTest() {
    printInstance(this);
}

public void printInstance(KeywordTest thisKeyword) {
    System.out.println(thisKeyword);
}

Inside the constructor, we invoke printInstance() method. With this, we pass a reference to the current instance.

5. Returning this

We can also use this keyword to return the current class instance from the method.

To not duplicate the code, here’s a full practical example of how it’s implemented in the builder design pattern.

6. The this Keyword Within the Inner Class

We also use this to access the outer class instance from within the inner class:

public class KeywordTest {

    private String name;

    class ThisInnerClass {

        boolean isInnerClass = true;

        public ThisInnerClass() {
            KeywordTest thisKeyword = KeywordTest.this;
            String outerString = KeywordTest.this.name;
        }
    }
}

Here, inside the constructor, we can get a reference to the KeywordTest instance with the KeywordTest.this call*.* We can go even deeper and access the instance variables like KeywordTest.this.name field.

7. Conclusion

In this article, we explored the this keyword in Java.

As usual, the complete code is available over on Github.