Static Initialization Blocks in Java

本文深入探讨了Java中静态初始化块的使用,包括其如何初始化类变量,执行时机,以及在继承中的行为。同时,文章提供了多个代码示例,帮助读者理解静态初始化块的特性及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值