Home > DeveloperSection > Forums > Static block in Java not executed
Simons Hood
Simons Hood

Total Post:70

Points:494
Posted on    June-06-2013 3:05 AM

 C# C# 
Ratings:


 1 Reply(s)
 1118  View(s)
Rate this:
Hi Expert,

class Test{
    public static void main(String arg[]){    
        System.out.println("**MAIN METHOD");
        System.out.println(Mno.VAL);//SOP(9090);
        System.out.println(Mno.VAL+100);//SOP(9190);
    }
}

class Mno{
    final static int VAL=9090;
    static{
        System.out.println("**STATIC BLOCK OF Mno\t:"+VAL);
    }
}

I know that a static block executed when class loaded. But in this case the instance variable inside class Mno is final, because of that the static block is not executing.

Why is that so? And if I would remove the final, would it work fine?

Which memory will be allocated first, the static final variable or the static block?

If due to the final access modifier the class does not get loaded, then how can the variable get memory?

Please help.
Thanks in advance. 



AVADHESH PATEL

Total Post:604

Points:4228
Posted on    June-06-2013 8:29 AM

Hi,

1)Actually you have not extends that Mno class so when compilation start it will generate constant of variable VAL and when execution start when that variable is needed its load thats from memory.so its not required your class reference so that static bock is not executed.

2)if A class extend that Mno class at that time that static block is included in A class if you do this then that static block is executed. for example.. public class A extends Mno{

public static void main(String arg[]){    
    System.out.println("**MAIN METHOD");
    System.out.println(Mno.VAL);//SOP(9090);
    System.out.println(Mno.VAL+100);//SOP(9190);
}
}

class Mno{
      final static int VAL=9090;
    static`{`
        System.out.println("**STATIC BLOCK OF Mno\t:"+VAL);
    }
}

I hope it may be helpful for you.


Don't want to miss updates? Please click the below button!

Follow MindStick