When a constructor parameter has the same name as a field, Java needs a way to tell them apart. this refers to the current object, so this.name = name copies the parameter into the field. You also use it to call another constructor of the same class with this(...) or to return the object for chained calls. It does not exist inside a static method, since there is no current object there.