您的位置:首页 > 其它

初始化块

2016-05-15 21:12 316 查看
在一个类中没有名字,没有标识表示的语句块叫初始化块,而用static修饰的初始化块叫静态初始化块,他门的基本形式如下:

public class A

{

static{//静态初始化块

......

}

{//初始化块

......

}

}

一个类中能有多个初始化块,而先定义的(静态)初始化块先执行,后定义的(静态)初始化块后执行,静态初始化块总是比初始化块先执行,而且子类中的静态初始化块会比父类的初始化块先执行;一个类中的初始化块比这个类中的中的构造器先执行。eg:

class A
{
static{
System.out.println("A类的静态初始化块");
}

{
System.out.println("A类的初始化块");
}

public A()
{
System.out.println("A类的构造器");
}
}
class B extends A{
{
System.out.println("B类的初始化块");
}

static{
System.out.println("B类的静态初始化块");
}

public B()
{
System.out.println("B类的构造器");
}
}
public class Run extends B
{
int a = 1;
{
a = 2;
b = 1;
}
int b = 2;
public Run()
{
System.out.println("Run:\ta = " + a + "\tb = " + b);
}
public static void main(String[] args)
{
System.out.println("第一次创建Run对象:");
new Run();
System.out.println("");
System.out.println("第二次创建Run对象:");
new Run();
}
}
运行结果为:

A类的静态初始化块

B类的静态初始化块

第一次创建Run对象:

A类的初始化块

A类的构造器

B类的初始化块

B类的构造器

Run: a = 2
b = 2

第二次创建Run对象:

A类的初始化块

A类的构造器

B类的初始化块

B类的构造器

Run: a = 2
b = 2

从上面的程序可以看出在没有创建Run对象时,静态初始化块依然执行了,而且第二次创建Run对象时,是没有执行静态初始化块的,这是因为静态初始化块是与类相关的,是对类进行初始化处理,与创没创建对象无关,而初始化块是与实例相关的,是对实例进行初始胡处理,必须先创建对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: