In context to my previous question Java classes and static blocks what if I changed my code from static block and variables to normal Instance Initialization Block and instance variables. Now how would the code be executed?
class extra3 {
    public static void main(String string[]) {
        Hello123 h = new Hello123();
        System.out.println(h.a);
    }
}
class Hello123 {
    {
        a=20;
    }
    int a=158;
}
Here I am getting output as 158. I am not able to understand the reason here.And the other code being this:
class extra3 {
    public static void main(String string[]) {
        Hello123 h = new Hello123();
        System.out.println(h.a);
    }
}
class Hello123 {
    int a=158;
    {
        a=20;
    }
}
Here the output is 20 which is acceptable because when object is created Instance block is executed first. But why is the output in first code coming as 158?
 
     
     
     
    