Constructor is static or non static
Your second example hits the spot. this
reference is available in the constructor, which means constructor is executed against some object - the one that is currently being created.
In principle when you create a new object (by using new
operator), JVM will allocate some memory for it and then call a constructor on that newly created object. Also JVM makes sure that no other method is called before the constructor (that's what makes it special).
Actually, on machine level, constructor is a function with one special, implicit this
parameter. This special parameter (passed by the runtime) makes the difference between object and static methods. In other words:
foo.bar(42);
is translated to:
bar(foo, 42);
where first parameter is named this
. On the other hand static
methods are called as-is:
Foo.bar(42);
translates to:
bar(42);
Foo
here is just a namespace existing barely in the source code.