服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

初学者入门:深入了解java对象初始化顺序

java 对象是如何进行初始化的,新建一printclass.java文件如下(包括类printclass以及a和其子类b),编译运行其中的main方法,

public class printclass {
    public static void main(string[] args){
        new b();
    }
    printclass(string var) {
        system.out.println(var);
    }
}
class a {
    static printclass pclassa1 = new printclass("a. 静态成员的初始化1");
    static {
        system.out.println("a. 静态初始化块1");
    }
    static {
        system.out.println("a. 静态初始化块2");
    }
    static printclass pclassa2 = new printclass("a. 静态成员的初始化2");
    {
        system.out.println("a. 实例初始化块1");
    }
    printclass pclassa = new printclass("a. 实例成员的初始化");
    {
        system.out.println("a. 实例初始化块2");
    }
    public int avar;
    public a() {
        system.out.println("a. 构造方法");
        dosomething();
    }
    private void dosomething() {
//    public void dosomething() {
        avar = 1111;
        system.out.println("avar=" + avar);
    }
}
//class b extends a
class b extends a
{
    public static void main(string[] args){
        new b();
    }
    public int bvar = 2222;
    {
        system.out.println("b. 实例初始化块1");
    }
    {
        system.out.println("b. 实例初始化块2");
    }
    printclass pclassb = new printclass("b. 实例成员的初始化");
    static {
        system.out.println("b. 静态初始化块1");
    }
    static printclass pclassb1 = new printclass("b. 静态成员的初始化1");
    static printclass pclassb2 = new printclass("b. 静态成员的初始化2");
    static {
        system.out.println("b. 静态初始化块2");
    }
    public b() {
        system.out.println("b. 构造方法");
        dosomething();
    }
    public void dosomething() {
        system.out.println("bvar=" + bvar);
    }
}
可以看到运行结果为:
a. 静态成员的初始化1
a. 静态初始化块1
a. 静态初始化块2
a. 静态成员的初始化2
b. 静态初始化块1
b. 静态成员的初始化1
b. 静态成员的初始化2
b. 静态初始化块2
a. 实例初始化块1
a. 实例成员的初始化
a. 实例初始化块2
a. 构造方法
avar=1111
b. 实例初始化块1
b. 实例初始化块2
b. 实例成员的初始化
b. 构造方法
bvar=2222
由此可知当新建一java对象(上面main方法中new b())时,它的内部初始化顺序为:
1.  父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4.  父类构造方法
5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6.  子类构造方法


扫描关注微信公众号