Static Initialization Blocks in Java

There are two variants of an initialization block in Java -
Static initialization block.
Instance Initialization block.

Static initialization block

Static initialization block is used to initialize class variables, which are defined with the static keyword. You can define a static initialization block in your class and it is automatically called when your class loads, i.e. when you run your program.Static initialization block precedes with the keyword static.

Static initialization block example
//Static initialization block

class A
{


//Static Initializaton Block
static	
{
System.out.println("Hello from the static block");
}

public static void main(String... ar)
{
}
}

Output:

Hello from the static block

We have defined a static initialization block in class A and it is executed as soon as we run our program.

Static initialization block can only access static variable of a class

Similar to the principle of static method, a static initialization block can only access static variables and static methods defined in the class.

class A
{
static int i;

static	//static initialization block
{
i=10;
System.out.println("A class is loaded");
System.out.println("value of i = "+ i);
}

public static void main(String... ar)
{
}
}

Output:

A class is loaded
value of i = 10
Static initialization block cannot access instance variables

Just like a static method, a static initialization block cannot access instance variables and doing so, gives a compile error.

class A
{
int a=20;

static	//static initialization block
{
System.out.println("A class is loaded");
System.out.println(a);
}

public static void main(String... ar)
{
}

}

Output:

A.java:8: error: non-static variable a cannot be referenced from a static context
System.out.println(a);
                   ^
1 error
Multiple static initialization blocks

You can define multiple static initialization blocks within your class and the order(starting from top) in which they are defined is the order in which they are executed at the time when the class loads.

//multiple static initialization blocks.

class A
{

//first static initialization block
static	
{
System.out.println("First hello from static block");
}

public static void main(String... ar)
{
}

//second static initialization block
static	
{
System.out.println("Second hello from static block");
}


//third static initialization block
static	
{
System.out.println("Third hello from static block");
}

}

Output:

First hello from static block
Second hello from static block
Third hello from static block
Static initialization block in inheritance

When a class which has extended another class, is executed. A static initialization block of a superclass is always executed before the static initialized block of a subclass.

class B
{
static	//static initialization block of A
{
System.out.println("Static block of B");
}
}

class A extends B
{
static	//static initialization block of B
{
System.out.println("Static block of A");
}

public static void main(String... ar)
{
}

}

Output:

Static block of B
Static block of A

Class A extended class B. On execution of class A, the static initialization block of its superclass B is executed before its own static initialization block.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值