classloader is a componenet of the JVM that loads the class files obtained after successful compilation.after compilation you can find your class files in the bin folder. when we run a java program it first loads these .class file that contain the bytecode understandable to the JVM. To further clear your point LOADING here means reading the class files from the bin folder to your memory (primary) where execution is performed. Now static variables are created at this moment (when the class is loaded). But non static (instance/local variables) can only be created (allocated memory space) at the time of execution when the object instantiation is performed. Static variables do not require explicit instantiation. The moment class files are loaded static varibales and static blocks also are allocated memory space.
Next is the process called as linking - here the loaded .class file is converted into ready to execute state. Like different thread schedules are created, stacks are created and pushed, and heaps are generated. (read stacks and heaps)
Then come the execution phase where stacks are executed one by one. It is in this phase that the Objects and instance variables are created.So we can see how early the static variables are created as compared to instance variables or objects.
Specifically if you wish to know why we need Static blocks. Supposedly in a situation we wish to create a certain set of static data for sharing data amongs different object - but the static data is not to be initialized simply by initialization statement rather it requires some sort of processing like conditions for assessing the value to be assigned. in such a case we cannot create a method as a method can only be executed after a class is instantiated. In such a case we may use a static block to instantiate the data. more specifically a static block is used when we need to process certain values before being used by the constructor.