Stack and Heap:
Stack: method invocations and local variables.
Heap: all objects (instance variables inside), no matter the reference is a local or instance variable.
Instance variables: declared inside a class but not inside a method.
Local variables: declared inside a method, including method parameters.
Constructor:
The only outside way to invoke a constructor is with the keyword new.
You must write a no-arg constructor if you have written(overloaded) an arg constructor and want to use a no-arg constructor.
All the constructors in an object's inheritance tree must run when you make a new object.
When invoking a constructor, it first calls its super constructor way up to Object. So in every constructor, the compiler by default puts the no-arg super constructor super() as the first statement if you don't.
Superclass part is always completely built before the subclass can be constructed.
You can call this() in a constructor to invoke another constructor. A constructor can have a call to super() or this(), but never both.
Garbage Collection:
Your job is to make sure that you abandon objects when you're done with them.