您的位置:首页 > 编程语言 > Java开发

Java程序初始化过程

2016-08-25 15:27 218 查看
java程序初始化执行顺序:

父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造函数 ->子类非静态变量 -> 子类非静态代码块 -> 子类构造函数

public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}


结果为:

构造块 构造块 静态块 构造块


解析

根据上一篇文章类的加载过程 以及 本篇文章类初始化顺序可以很容易得出结论。

1 . 类加载器加载该类

2 . 链接:

a. 检查

b. 准备:对 t1 和 t2 赋初始值 null

c. 解析

3 . 初始化:new 两个 B对象,并赋值给t1和t2。 此时t1和t2才赋予我们设置的真实值。

在new一个B对象时,由于代码中存在非静态代码块,而非静态代码块只是在new一个对象时执行一次,不是随类加载而加载的。

因此,先打印两次 构造块

接着类加载执行静态代码块,即打印 静态块

然后在程序入口方法main()中又创建了一个B类型对象,故再次打印 构造块
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息