Dolly, The way I think of it is the JVM allocates such storage from the heap (as opposed to the stack). This is true for instance variables and static data. At the time of allocation it clears the data to zeros (which explains the default values for all variable types).
Only later (either at class loading for static initialisers), or constructors for (class instances) does the JVM run any initial assigement code (but before the constructor chain runs up the class heirarchy.
Finally, your class constructor code itself runs (as the JVM executes back down the class hierarchy) when /that/ code may start to over-write JVM defaults / static assignments.
(ok, there may be steps I've missed - it's late and I've drunk some wine ;-) It all seemed logical to me when I studied the detail - though I can't help thinking in 'C' terms for some of this - NO "POINTERS" MY AR^H^H^H^H^H^H^H^H^H I'm an OO programmer, honest ;-)
Never attribute to malice that which is easily explained by incompetence.<br />SCJP (1.5)
I RELEASE YOU! (for now .... ) Feel free to peruse this tiny ad: