首先,我们简单了解一下代码块和构造方法
静态代码块:
存在类内方法外,使用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();
}
}
结果:
扫描二维码关注公众号,回复:
2747838 查看本文章
Zi z = new Zi() 的运行结果:
父类的静态代码块
子类的静态代码块
父类的构造代码块
父类的含参构造方法
父类的无参构造方法
父类的代码块
子类的构造代码块
子类的含参构造
子类无参构造方法
子类的代码块
Die d = new Zi() 的运行结果:
父类的构造代码块
父类的含参构造方法
父类的无参构造方法
父类的代码块
子类的构造代码块
子类的含参构造
子类无参构造方法
子类的代码块
静态代码块只加载一次,所以第二次没有加载静态代码块