Chapter 35: this Keyword in Java
This chapter is only about this: a reference to the current object during instance method execution or inside constructors. Constructors and this(...) chaining were introduced in Chapter 34; here we focus on why this exists in everyday code.
1. Topic title
this: “the object whose method or constructor is running right now”
2. What it means
Inside non-static methods and constructors, this is an implicit parameter—the receiver of the call.
class Person {
private final String name;
Person(String name) {
this.name = name;
}
String greeting() {
return "Hi, I am " + this.name;
}
}this.name = name means: assign the parameter name into this object’s field name. Without this., the assignment name = name would be confusing or wrong depending on shadowing rules.
3. Why it is used
Clarity when names collide — parameters often mirror field names (email, balance). this tells the reader “field on the left, parameter on the right.”
Calling another constructor — this(...) must be the first line in a constructor (Chapter 34).
Passing self — register(this) when an object subscribes to a listener or adds itself to a collection.
4. Real-world example
A Cart might call warehouse.reserve(this) so the warehouse knows which cart asked for stock—this is the cart instance.
5. Java code example
class Counter {
private int value;
Counter(int value) {
this.value = value;
}
Counter() {
this(0);
}
void bump() {
this.value++;
}
Counter copyState() {
return new Counter(this.value);
}
int read() {
return this.value;
}
}
public class ThisKeywordDemo {
public static void main(String[] args) {
Counter c = new Counter(5);
c.bump();
System.out.println(c.read());
Counter d = c.copyState();
System.out.println(d.read());
}
}6. Explanation of code
this.valuein constructor — field vs parameter.this(0)— delegates to the other constructor.new Counter(this.value)— passes current value into a fresh object.
7. Common mistakes
Using this inside static methods — compile error; there is no current instance.
Calling this(...) not on the first line — compile error.
Shadowing fields accidentally — then forgetting this. and wondering why the field never updates.
8. Best practices
Use this. for fields even when not required—some teams like the consistency when a method is long.
Keep constructors delegating with this(...) instead of duplicating validation logic.
9. Small practice task
Create class Wallet with private int balance and constructor Wallet(int balance) using this.balance = balance. Add void spend(int amount) that subtracts only if amount <= this.balance. Use this explicitly in those bodies. In main, spend and print balance with read() accessor you add.
Beginner tip
Read this aloud as “me”. this.balance → “my balance.”