Java基础整理(2) 继承与代码块执行顺序
一些混淆点
文章目录
继承与代码块执行顺序
类的顺序
public class Father {
public Father(){
System.out.println("--父类的无参构造函数--");
}
static{
System.out.println("--父类的静态代码块--");
}
{
System.out.println("--父类的非静态代码块--");
}
//加入一个main程序后
public static void main(String[] args) {
System.out.println("--Main函数执行--");
Father father=new Father();
}
}
执行结果如下图
可见,静态代码块在main函数之前执行,执行顺序为,静态代码块>非静态代码块>构造函数
静态代码块在Main函数执行之前执行。
子父类的顺序
public class Son extends Father {
static{
System.out.println("--子类的静态代码块--");
}
{
System.out.println("--子类的非静态代码块--");
}
Son(){
System.out.println("--子类的无参构造函数--");
}
public static void main(String[] args) {
System.out.println("--子类的Main函数执行了--");
Father father=new Father();
Son son=new Son();
}
}
执行结果如下图
可见
1、new一个函数时先加载其父类,从非静态代码块开始进行加载。顺序:父类非静态代码块>父类构造函数>子类非静态代码块>子类构造函数。
2、加载一个类时从静态代码块开始,从其父类开始加载。PS:静态变量的定义与静态代码块的执行与其在类中顺序有关,依照从上到下顺序。