java中对象的初始化过程

java中构造一个类实例,就要首先递归构造它的父类,因为子类是由父类派生而来,只有有了父类才可能有子类.而对于类本身的构造过程中,是要首先按顺序来对它的成员变量进行初始化,然后再调用其构造方法.
 

   所以 java中构造一个类的整个过程可以理解为:如果有父类 先 1父类的成员变量初始化 然后构造父类 2本类成员变量初始化 3调用本类构造方法

    实际上在每个类(除Object外)的构造造方法中都要执行super()方法,默认的情况下系统会自动为构造方法最前面加上super()这条语句,我们可以显示的写出来,并且也可为其加上参数,前提是父类有相对应的构造方法.前面说的构造本类之前要构造父类就是这条语句的作用.
    成员变量的初始化过程是在super()语句后面其它方法体前面执行的
    如果某个类的父类有多个构造方法时 子类就可以用不同的参数调用父类中相对应的构造方法来构造父类
    如果加上自由块和静态的自由块 执行的顺序为:
       父类的静态自由块,父类的静态成员变量被初始化

       子类的静态自由块,子类的静态成员变量被初始化

       父类的自由块,父类的成员变量被初始化

       父类的构造方法

       子类的自由块,子类的成员变量被初始化

       子类的构造方法
   自由块和成员变量是等同的优先级被初始化的


public class MyTest2{
    
    
    public static void main(String[] args) {
        child c = new child();
    }

}
class D{
    public D(String temp){
        System.out.println(temp);
    }
}

class base{
    static{
        System.out.println("父类的静态自由块被初始化");
    }
    static D temp = new D("父类的静态成员变量被初始化");
    {
        System.out.println("父类的自由块被初始化");
    }
    D temp2 = new D("父类的成员变量被初始化");
    public base(){
        System.out.println("父类的构造方法被初始化");
    }
}
class child extends base{
    static D temp = new D("子类的静态成员变量被初始化");
    D temp2 = new D("子类的成员变量被初始化");
    static{
        System.out.println("子类的静态自由块被初始化");
    }
    {
        System.out.println("子类的自由块被初始化");
    }
    public child(){
        System.out.println("子类的构造方法被初始化");
    }
}

运行结果:

父类的静态自由块被初始化
父类的静态成员变量被初始化
子类的静态成员变量被初始化
子类的静态自由块被初始化
父类的自由块被初始化
父类的成员变量被初始化
父类的构造方法被初始化
子类的成员变量被初始化
子类的自由块被初始化
子类的构造方法被初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值