java子类构造加载顺序,关于java中代码块和构造函数的加载顺序以及父类和子类中的加载顺序...

首先,我们简单了解一下代码块和构造方法

静态代码块:

存在类内方法外,使用static修饰,作用是类的预加载,当类第一次被加载的时候执行一次,优先于构造代码块 优先于构造方法

构造代码块:

存在类内方法外,作用是对象的预加载,每当new调用构造方法的时候 会优先执行构造代码块,每new一次就优先执行一次构造代码块

普通代码块:

存在成员方法中,作用是控制变量的生命周期,执行完后立即消失.

构造方法:

创建对象的方式,每当调用构造方法时,构造方法执行一次

关于加载顺序,我们将通过实现代码来查看

一、定义一个父类

public class Die {

int age;

static {

System.out.println("父类的静态代码块");

}

{

// 父类的构造代码块

System.out.println("父类的构造代码块");

}

// 父类无参

public Die() {

this(20);

System.out.println("父类的无参构造方法");

// 普通代码块

{

System.out.println("父类的代码块");

}

}

// 父类含参

public Die(int age) {

super();

this.age = age;

System.out.println("父类的含参构造方法");

}

}

二、定义一个子类

public class Zi extends Die{

String name;

static{

System.out.println("子类的静态代码块");

}

{

//构造代码块

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

}

//子类无参

public Zi() {

this("");//在执行子类的含参构造方法 但是没有对象产生

System.out.println("子类无参构造方法");

//普通代码块

{

System.out.println("子类的代码块");

}

}

//子类含参

public Zi(String name) {

super();

this.name = name;

System.out.println("子类的含参构造");

}

}

三、测试类

public class ExtendsDemo {

public static void main(String[] args){

Zi z = new Zi();

System.out.println("==========");

Die d = new Zi();

}

}

结果:

Zi z = new Zi() 的运行结果:

父类的静态代码块

子类的静态代码块

父类的构造代码块

父类的含参构造方法

父类的无参构造方法

父类的代码块

子类的构造代码块

子类的含参构造

子类无参构造方法

子类的代码块

Die d = new Zi() 的运行结果:

父类的构造代码块

父类的含参构造方法

父类的无参构造方法

父类的代码块

子类的构造代码块

子类的含参构造

子类无参构造方法

子类的代码块

静态代码块只加载一次,所以第二次没有加载静态代码块

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值