Java对象执行顺序及构造方法super问题

无父类时的顺序:

静态代码块=静态成员变量>普通代码块=普通成员变量>构造函数;

有父类时的顺序:

父类静态代码块=父类静态成员变量>子类静态代码块=子类静态成员变量>

父类普通代码块=父类普通成员变量>父类构造函数>

子类普通代码块=子类普通成员变量>子类构造函数;

总结:静态优先级最高,父类优先级高于子类,同类构造函数优先级最低

 代码展示:



public class Run {
    public static void main(String[] args) {
        new Son();
    }
}
class Parent{

    public Parent() {
        System.out.println("父类构造方法");
    }

    Test t = new Test("父类成员变量");

    {
        System.out.println("父类构造代码块");
    }
    
    static Test t1 = new Test("父类静态成员变量");

    static {
        System.out.println("父类静态代码块");
    }
}

class Son extends Parent{

    public Son() {
        System.out.println("子类构造方法");
    }

    {
        System.out.println("子类构造代码块");
    }

    static {
        System.out.println("子类静态代码块");
    }

    Test t3 = new Test("子类成员变量");

    static Test t4 = new Test("子类静态成员变量");
}

class Test{
    public Test(String str){
        System.out.println(str);
    }
}

测试结果:

父类静态成员变量
父类静态代码块
子类静态代码块
子类静态成员变量
父类成员变量
父类构造代码块
父类构造方法
子类构造代码块
子类成员变量
子类构造方法

 拓展:

类默认有一个无参构造函数,当定义有参构造函数,默认的无效,需要自定义无参构造。

子类中的构造函数必须要有父类的构造引用(即super()),且放在子类构造函数的第一行,如果没有写默认调用父类的无参构造。所以要注意父类的构造是否有效

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值