MOBI BOOT CAMP CORP. logoLearning Buddy
  • SIGN IN
  • Introduction
  • Unit 0: The First Program
  • Unit 1: Using Objects and Methods
  • Unit 2: Selection and Iteration
  • Unit 3: Class Creation
    • Part 1: Basic Concepts
    • Part 2: Methods
      • Methods: How to Write Them
      • Methods: Passing and Returning References of an Object
      • Class Variables and Methods
      • Scope and Access
      • this Keyword
      • Unit 3 Part 2 Slides
  • Unit 4: Data Collections

Unit 3.9: The this Keyword

The this keyword is a fundamental concept in Java that allows an object to reference itself. You first encountered this briefly in Unit 1.15 (String Manipulation) when learning how to print objects. Now, we will explore its crucial role in object-oriented design, specifically how it serves as a bridge between local data and the current object instance.

The this Reference

Within an instance method or a constructor, the keyword this acts as a special variable that holds a reference to the current object—the specific instance whose method or constructor is currently executing.

Self-Reference
  • The this keyword allows an object to "point" to itself. It provides an explicit way to access the object's own members (attributes and methods) from within its own code.

Resolving Variable Shadowing

The most common use of this is to distinguish between instance variables and local parameters that share the same name (a situation known as shadowing, which we explored in Unit 3.8).

Task: Using this to resolve variable shadowing in a constructor.

public class Book {
    private String title;

    public Book(String title) {
        // 'this.title' explicitly refers to the instance variable
        // 'title' refers to the parameter passed into the constructor
        this.title = title;
    }

    public String getTitle() {
        // While optional here, 'this' clarifies we are returning 
        // the state of THIS specific book object.
        return this.title;
    }
}

Passing this as an Argument

The this keyword can be used to pass the current object as an argument to another method call. This is often used in systems where objects must "register" themselves with a manager or listener.

Task: Passing the current object instance as an argument.

public class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public void applyForGraduation(Registrar registrar) {
        // Pass the current Student object (this) to the registrar
        registrar.process(this);
    }

    public String getName() {
        return name;
    }
}

class Registrar {
    public void process(Student s) {
        // The registrar now has a reference to the student who called 'apply'
        System.out.println("Processing graduation for: " + s.getName());
    }
}

this in Static Context

It is a critical rule in Java that class methods (static methods) do not have a this reference.

  • The Reason: Static methods belong to the class itself and can be called without creating any objects. Since there may not be a "current object" when a static method runs, this has no meaning.
  • The Result: Using this inside a static method will result in a compile-time error.

Task: Identifying illegal usage of this in a static method.

public class Logger {
    public static void log(String msg) {
        // System.out.println(this); // COMPILE ERROR: No 'this' in static context
        System.out.println("LOG: " + msg);
    }
}

Determining Results with this

When tracing code that uses this, remember that it always points to the object that was used to call the method.

Trace Challenge: Hidden Updates

What is printed as a result of executing the code below?

Task: Tracing the interaction between local parameters and this reference.

public class Counter {
    private int value = 0;

    public void increment(int value) {
        // This line updates the LOCAL parameter, not the instance variable
        value = value + 1;
        
        // This line updates the INSTANCE variable
        this.value = this.value + 1;
    }

    public void display() {
        System.out.println("Value is: " + this.value);
    }

    public static void main(String[] args) {
        Counter myCounter = new Counter();
        myCounter.increment(10);
        myCounter.display();
    }
}

Analysis:

  1. Inside increment(10), the parameter value starts at 10 and becomes 11.
  2. The instance variable this.value starts at 0 and becomes 1.
  3. The final output is Value is: 1.
Exclusion Statement:
  • The use of this() to call one constructor from another (constructor chaining) is outside the scope of the AP Computer Science A course and exam.
public class Person {
   private String name;
   private int age;
   public Person(String name) {
       this(name, 0); // Calls the two-parameter constructor (Outside AP Scope)
   }
   public Person(String name, int age) {
       this.name = name;
       this.age = age;
   }
}
Privacy Policy | Terms & Conditions