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?
Static block in java is executed every time when a class loads. This is also known as Static initialization block. Static block in java initializes when class load into memory , it means when JVM read the byte code.
Therefore, only one time static block will be executed. Note: Instance block and constructor both are executed during the object creation but instance block will execute first before the execution of the constructor during the object creation.
Yes, we can execute a java program without a main method by using a static block. Static block in Java is a group of statements that gets executed only once when the class is loaded into the memory by Java ClassLoader, It is also known as a static initialization block.
Whenever an object is created, a non-static block will be executed before the execution of the constructor.
static final int
field is a compile-time constant and its value is hardcoded into the destination class without a reference to its origin; In specific detail, the compiled bytecode corresponds to this:
public static void main(String arg[]){ System.out.println("**MAIN METHOD"); System.out.println(9090) System.out.println(9190) }
As soon as you remove final
, it is no longer a compile-time constant and the special behavior described above does not apply. The Mno
class is loaded as you expect and its static initializer executes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With