系列文章目录
Java中的继承和多态系列文章目录
第一章 super和this的使用区别
第二章 理清代码块
前言
之前我们讲过有关实例代码块和静态代码块的基础知识(Java中的类和对象之代码块),在这里我就不再赘述。今天我们接着来讲一下在继承中各个代码块的执行逻辑。
其实代码块的执行顺序很简单,我们通过以下一段代码就可清晰看出答案:
public class Animal {
String name;
int age;
public static String location;
public Animal(){
System.out.println("父类构造方法");
}
{
System.out.println("父类实例代码块");
}
static{
System.out.println("父类静态代码块");
}
}
public class Dog extends Animal{
public Dog() {
System.out.println("子类构造方法");
}
{
super.name = "阿黄";
super.age = 12;
System.out.println("子类实例代码块");
}
static{
location = "China";
System.out.println("子类静态代码块");
}
public void print(){
System.out.println("name:"+name+" age:"+age+" location:"+location);
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.print();
}
}
执行结果如下:
父类静态代码块
子类静态代码块
父类实例代码块
父类构造方法
子类实例代码块
子类构造方法
name:阿黄 age:12 location:China
通过分析执行结果,我们可以得出以下结论:
- 父类静态代码块优先于子类静态代码块执行,且是最早执行
- 父类实例代码块和父类构造方法紧接着执行
- 子类实例代码块和子类构造方法再执行
- 第二次实例化子对象时,父类和子类静态代码块都不会再执行