Static Control Flow decides the sequence of activities/steps that will be executed in order when we run a java class that contains static variables, methods, and blocks. This article will explain how static control flow takes place whenever a Java program is executed.
Prerequisite: Static Blocks
The Static Control Flow mechanism performs following 3 steps in the exact chronological order:
- Identification of static members from top to bottom. All the static variables, methods, and blocks are identified during this step.
- Execution of static variable assignments and static blocks from top to bottom.
- Finally, the static main method is executed in the last step of static control flow.
100 0 Inside First Static Block Inside Second Static Block 200 Main method has finished its execution
When the above program is executed, the static control flow mechanism will execute the 3 steps in order. After identifying static members in the first step, both the static blocks are executed from top to bottom. Inside the first static block, the value of variable ‘a’ is 100 as it has been initialized before the execution of the first static block.
But, inside the second static block, the value of variable ‘b’ is not yet initialized as per static control flow. So, the JVM will print 0 as the default value of an uninitialized static variable.
Then, during the third and final step, the static main method is executed. Inside the main method, static method print() is called again, and this time it prints b = 200 as the variable ‘b’ is initialized during the second step.
Direct and Indirect Reference
If we try to read and display the value of a variable inside the static block, that read operation is called a direct read. If we are calling a method from a static block, and within that method, if we are trying to read a variable, that read operation is called an indirect read.
In the above example, while printing the value of variable ‘a’ inside the first static block, it is considered as a direct read operation. However, within the same static block, a static method print() is invoked and the value of variable ‘b’ is printed. This is considered as an indirect read operation.
If a variable is just identified by the JVM and not yet initialized by its original value, then the variable is said to be in the Read Indirectly Write Only (RIWO) state. After the first step of static control flow, both the variables ‘a’ and ‘b’ are in RIWO state.
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.