[转载]Java中父类与子类的加载顺序详解
2016-12-24 17:02
253 查看
class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例) //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化 public String p_Field = "父类--变量"; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("父类--静态初始化块"); } // 初始化块 { System.out.println(p_Field); System.out.println("父类--初始化块"); } // 构造器 public Parent() { System.out.println("父类--构造器"); } } public class SubClass extends Parent { // 静态变量 public static String s_StaticField = "子类--静态变量"; // 变量 public String s_Field = "子类--变量"; // 静态初始化块 static { System.out.println(s_StaticField); System.out.println("子类--静态初始化块"); } // 初始化块 { System.out.println(s_Field); System.out.println("子类--初始化块"); } // 构造器 public SubClass() { //super(); System.out.println("子类--构造器"); } // 程序入口 public static void main(String[] args) { System.out.println("*************in main***************"); new SubClass(); System.out.println("*************second subClass***************"); new SubClass(); } }
输出结果:
父类–静态变量
父类–静态初始化块
子类–静态变量
子类–静态初始化块
[b]********in main**********[/b]
父类–变量
父类–初始化块
父类–构造器
子类–变量
子类–初始化块
子类–构造器
[b]********second subClass**********[/b]
父类–变量
父类–初始化块
父类–构造器
子类–变量
子类–初始化块
子类–构造器
结果分析:
很显然在加载main方法后,静态变量不管父类还是子类的都执行了,然后才是父类和子类的的普通变量和构造器。这是因为,当要创建子类这个对象时,发现这个类需要一个父类,所以把父类的.class加载进来,然后依次初始化其普通变量和初始化代码块,最后其构造器,然后可以开始子类的工作,把子类的.class加载进来,在做子类的工作。
另外在Java中子类中都会有默认的调用父类的默认构造函数即super(),当仅仅有默认构造函数里
Java替你做了,我们可以做个实验,如果在父类中注释掉默认构造函数,加一个有参的构造函数时,如果
子类中不加super(argument),此时会报语法错误
如果我们把Main方法中的内容全注释掉,你会发现只会输出
父类–静态变量
父类–静态初始化块
子类–静态变量
子类–静态初始化块
其它不会输出了。原因呢? 还要研究
相关文章推荐
- Java中父类与子类的加载顺序详解
- 浅谈Java中父类与子类的加载顺序详解
- 浅谈Java中父类与子类的加载顺序详解
- 浅谈Java中父类与子类的加载顺序详解
- Java多态性详解——父类引用子类对象(网络转载)
- Java父类子类加载顺序
- java中的加载顺序以及父类与子类的构造方法
- java 子类继承父类 类加载顺序
- Java继承中父类和子类的加载顺序
- Java中子类、父类、变量、static方法的加载顺序
- [转载]Java静态函数、父类、子类执行顺序
- JAVA中父类与子类静态代码块、非静态代码块、构造函数的加载顺序
- 浅谈Java中父类与子类的加载顺序详解
- 块,静态块,子类,父类,继承加载顺序
- java中子类继承父类,程序运行顺序
- Java多态性详解——父类引用子类对象
- java相关总结2-父类和子类的加载关系
- java 父类子类静态成员,实例成员,构造函数初始化的顺序
- Java多态性详解——父类引用子类对象-2