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 DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Flow control in try catch finally in Java
- Understanding "static" in "public static void main" in Java
- Understanding storage of static methods and static variables in Java
- Static and non static blank final variables in Java
- Why non-static variable cannot be referenced from a static method in Java
- Difference between static and non-static variables in Java
- Difference between static and non-static method in Java
- Initialize a static Map using Java 9 Map.of()
- static keyword in java
- Static blocks in Java
- Static class in Java
- Static import in Java
- Initialize a static Map using Stream in Java
- Static vs Dynamic Binding in Java
- Shadowing of static functions in Java
- Why can't static methods be abstract in Java?
- Static method in Interface in Java
- Static Variables in Java with Examples
- Final static variable in Java
- Initialize a static map in Java with Examples
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.