What is static block?

Long Answer
Views 608

Answer:

It is used to initialize the static data member, It is excuted before main method at the time of classloading.

In Java, a static block is a block of code that is executed only once when the class is first loaded into memory. It is used for initializing static variables or performing any setup that is required before any static methods or variables are accessed.

Characteristics of Static Blocks

  1. Initialization: Static blocks are often used to initialize static variables or perform setup tasks that need to be done only once.

  2. Execution: A static block is executed when the class is loaded by the Java Virtual Machine (JVM), before any instances of the class are created or any static methods or variables are accessed.

  3. Order of Execution: If a class has multiple static blocks, they are executed in the order in which they appear in the code.

  4. No Instance Context: Static blocks do not have access to instance variables or methods. They can only access static variables and methods of the class.

Syntax

<span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">MyClass</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">static</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="com">// Static initialization code</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span>

Example

<span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">MyClass</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> count</span><span class="pun">;</span><span class="pln">

    </span><span class="com">// Static block to initialize static variables</span><span class="pln">
    </span><span class="kwd">static</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        count </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Static block executed"</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">MyClass</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        count</span><span class="pun">++;</span><span class="pln">
        </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Constructor executed"</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> main</span><span class="pun">(</span><span class="typ">String</span><span class="pun">[]</span><span class="pln"> args</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="typ">MyClass</span><span class="pln"> obj1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MyClass</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Static block is executed first</span><span class="pln">
        </span><span class="typ">MyClass</span><span class="pln"> obj2 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MyClass</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Constructor is executed each time an object is created</span><span class="pln">
        </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Count: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">MyClass</span><span class="pun">.</span><span class="pln">count</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span>

h3>

Explanation

  • Static Block Execution: When the MyClass is loaded, the static block executes first, initializing the count variable and printing "Static block executed".
  • Constructor Execution: Each time a MyClass object is created, the constructor runs and increments the count, printing "Constructor executed".
  • Static Variable Access: The count variable is a static variable shared among all instances of the class and is initialized in the static block.

Use Cases

  • Initialization: Setting up static resources or configurations.
  • Logging: Performing logging or diagnostics when the class is loaded.
  • Configuration: Loading configuration files or settings that are needed for the class.

Static blocks are a useful feature for initializing class-level resources that need to be set up once and shared across all instances of the class.

Related Articles:

This section is dedicated exclusively to Questions & Answers. For an in-depth exploration of Java Programming Language, click the links and dive deeper into this subject.

Join Our telegram group to ask Questions

Click below button to join our groups.