In Java, static variables are initialized when the class is loaded, and initializer blocks (both static and instance) run before the constructor body. Static blocks run once at load time; instance blocks run every time an object is created, just before the constructor.