When a class is instantiated and loaded it becomes an object.
When you have many objects of the same type they can be called as instances of that object. They need not have the same data in them.
A reference is used to point to an object. This reference may also point to null which means that it points to nothing. A reference is a way by which you can access the contents of that object. If you try to execute methods or access variables of a reference that points to null, you get a NullPointerException.