java类初始化顺序_java中继承和组合的运用以及初始化顺序

通过demo展现java中 包含继承和组合时,程序的初始化顺序.

1.初始化顺序

public class App2 {    public static void main(String[] args){        new Child1();    }}class Parent {    public Parent(){        System.out.println("-----parent constructor method");    }    static{        System.out.println("-----parent static block");    }    {        System.out.println("-----parent non static block");    }}class Child1 extends Parent{    private DependencyClass dependencyClass = new DependencyClass();    public Child1(){        System.out.println("*****child1 constructor method");    }    static{        System.out.println("*****child1 static block");    }    {        System.out.println("*****child1 non static block");    }    static{        System.out.println("*****child1 static block1");    }    {        System.out.println("*****child1 non static block1");    }}class DependencyClass{    DependencyClass(){        System.out.println("=====dependencyClass constructor method");    }    static{        System.out.println("=====dependencyClass static block");    }    {        System.out.println("=====dependencyClass non static block");    }}

输出:
-----parent static block
*****child1 static block
*****child1 static block1
-----parent non static block
-----parent constructor method
=====dependencyClass static block
=====dependencyClass non static block
=====dependencyClass constructor method
*****child1 non static block
*****child1 non static block1
*****child1 constructor method

从输出结果看:
父类的静态代码块->子类的静态代码块->父类的非静态代码块->父类的构造方法->成员初始化->子类的非静态代码块->子类的构造函数

还可以看出 静态代码块以及非静态代码块都是按声明顺序执行的

2.继承中的注意点

package javaBase1;public class App3 {    public static void main(String[] args){        new Child1();    }}class Parent{    public Parent(){        this.showName();    }    public void showName(){        System.out.println("parent method");    }}class Child1 extends Parent{    private String name = "张三";    public Child1(){        name = "李四";    }    @Override    public void showName(){        System.out.println("Child1 method " + name);    }}

输出:
Child1 method null

java中 this指向的是当前实例, new 的是Child1 初始化父类的时候 就会调用Child1的方法.
java编程思想中说: 一个动态绑定的方法调用会向外深入到继承层次结构内部.
但此时子类Child1还未初始化 成员属性还未赋值

9a89971a617edafb255aa4ec74fd854b.png

step by step forward

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值