Похоже тут никто из комментаторов понятия не имеют, как на самом деле работает их код.
Вы пишите такой код:
class Foo {
void foo(String str) { ... };
}
...
Foo f = new Foo();
f.foo("abc");
Компилятор же сгенерирует байткод, который примерно соответствует такому коду:
class Foo {
static void foo(Foo this, String str) { ... };
}
...
Foo f = new Foo();
Foo.foo(f, "abc");
this - это неявный первый параметр любого нестатического метода класса. У какого объекта вы метод вызываете, тот и будет передан в качестве параметра this.
Так что по сути this это не обычное ключевое слово, это просто имя параметра в методе.