A class is loaded when a
Java program referencing that class is executed. Its static variables and static blocks are executed at this time. Static variables can be accessed immediately by the program (in the first line of the main method, if necessary).
A class is instantiated when, during a program, an instance of that class is created. At this time instance variables, non-static blocks, and finally the constructor are all executed. Instance variables cannot be accessed until an instance of the class is created.