I think when the java would be executing the initilazers from top to bottom , in second case when it would be doing so , it first has to run the test1() method so so i gets its value ..but in first case when the java would be executing the initializers , it does not need to run j as such as j is a literal ..but then java would already have first saved all the static members values before executing