静态代码块
格式:
static
{
静态代码块中的执行语句
}
特点:
随着类的加载而执行,只执行一次,用于给类进行初始化,并优先于主函数执行
考虑如下java语句
class StaticCode
{
static
{
System.out.println("a");
}
}
public class Demo {
static
{
System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.println("end");
}
static
{
System.out.println("c");
}
}输出结果为:
b
c
a <==虽然有两个调用StaticCode的语句,但是因为其中只包含静态代码块,而静态代码块只执行
一次,所以只输出一个a
end
只有涉及到类中的内容的时候,类才会加载,静态代码块才会执行
StaticCode m = null; <==类没有被加载
s = new StaticCode(); <==类被加载了,因为用到了类中的构造函数StaticCode(),所以静态代码块
会被执行
所以判断一个类有没有被加载,可以用静态代码块来验证
class StaticCode
{
StaticCode()
{
System.out.println("c");
}
static
{
System.out.println("a"); I
}
{
System.out.println("b"); II
}
StaticCode(int x)
{
System.out.println("hah"); III
}
public static void test()
{
System.out.println("succeed");
}
}
public class Demo {
public static void main(String[] args)
{
new StaticCode(5);
}
}I ----- 静态代码块给类进行初始化
II ----- 构造代码块给对象进行初始化
III ----- 构造函数给对应对象进行初始化
输出结果:
a
b
hah
注意:静态代码块只可以访问静态变量
构造代码块可以访问到
原文:http://caoyue.blog.51cto.com/9876038/1620598