i think there is one primitive only. Because in the other case, the variable j inside the static block doesn't have the type(so, we can't assume it to be int). while the declaration is done outside the static block, initialization is done inside static block. It has got to do with the order of executing of static block and the instance variables. But, if that is the case a static block gets executed(at class loading) before the instance variable initialization is done. So, it should have errored out for case.1....confused!!!