派生类与超类各代码块执行顺序
概述
探究父类和子类 普通代码块、构造代码块及静态代码块的执行情况。
代码示例
class Fu{
{
System.out.println("父类的普通代码块!");
}
public Fu() {
System.out.println("父类的构造代码块!");
}
static {
System.out.println("父类的静态代码块!");
}
}
class Zi extends Fu{
{
System.out.println("子类的普通代码块!");
}
public Zi() {
System.out.println("子类的构造代码块!");
}
static {
System.out.println("子类的静态代码块!");
}
}
public class TestDemo {
public static void main(String[] args){
Fu fu = new Fu();
System.out.println();
Zi zi = new Zi();
}
}
输入结果为
父类的静态代码块!
父类的普通代码块!
父类的构造代码块!
子类的静态代码块!
父类的普通代码块!(父类普通代码块调用,说明super()加载的是整个父类)
父类的构造代码块!
子类的普通代码块!
子类的构造代码块!
若上述主方法修改为如下代码
public class TestDemo {
public static void main(String[] args){
Zi zi = new Zi();
}
}
输入结果为(比第一种情况多输出一个父类静态代码块。)
父类的静态代码块!
子类的静态代码块!
父类的普通代码块!
父类的构造代码块!
子类的普通代码块!
子类的构造代码块!
原因为,静态代码块只在类加载时执行一次,且优先级最高。
本文详细解析了Java中父类和子类在构造过程中的代码块执行顺序,包括普通代码块、构造代码块及静态代码块。通过具体实例展示了不同情况下代码块的执行流程,揭示了super关键字在构造函数中的作用。
3535

被折叠的 条评论
为什么被折叠?



