More on 'this' variable: https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html More on class methods and fields: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html class Point { int x,y; Point(int a, int b) { x = a; y = b; } // the hidden 'this' argument is the object // on which the method is called void move(int dx, int dy) { x += dx; // short form of this.x += dx y += dy; // short form of this.y += dy } } --------- void m () { Point p = new Point(0,1); p.move(1,2); // this == p ... } -------------- The above could be written as: class Point { int x,y; // here the parameter x shadows the object field // using 'this' is necessary to refer the object field Point(int x, int y) { // x = x; <- WARNING! This would left this.x initialized to 0. this.x = x; this.y = y; } void move(int dx, int dy) { this.x += dx; // same as x += dx this.y += dy; // same as y += dy } } --------- void m () { Point p = new Point(0,1); p.move(1,2); // here this == p ... } ------- class Point { int x,y; // class method -> doesn't have extra this variable // can access fields x and y through a Point object only static Point makePoint(int x, int y) { Point p = new Point(); // this.x = x; <- ERROR! p.x = x; p.y = y; return p; } void move(int dx, int dy) { this.x += dx; // same as x += dx this.y += dy; // same as y += dy } } --------- void m () { Point p = Point.makePoint(1,2); ... }