前言
本章记录一下Java创建子类时各成员的调用顺序,这算是Java的基础,也属于一个重难点内容,也关系着后面阅读源码,有些时候长时间不回顾,该知识点就可能混淆,因此在这里记录一下。
正文
Java的类中成员大致有:静态属性、静态方法、静态代码块、普通属性、普通方法、普通代码块、构造方法等。
在如今很多面试题中都大致会有一道关于创建子类时,各成员加载顺序的题,这里整理并记录如下。
1. 父类的静态代码块和静态成员(静态属性和方法)(优先级一样,则按顺序执行)
2. 子类的静态代码块和静态成员(优先级一样,则按顺序执行)
3. 父类的普通代码块和普通成员(优先级一样,则按顺序执行)
4. 父类的构造器(构造方法)
5. 子类的普通代码块和普通方法(优先级一样,则按顺序执行)
6. 子类的构造器
一层继承关系如此,多层继承关系也是如此,判断时需要谨慎小心一些,设计到大量的属性方法,可能会看花眼。
说明
1、构造方法是初始化属性,在此之前会有类加载和对象实例化的步骤,因此,构造方法是最后执行的
2、构造方法中默认会隐藏super()和普通代码块,super()是在构造方法的第一行,因此通常都是先执行完父类成员再执行子类成员,静态成员除外,因为它们属于类,是最先执行的。
3、静态方法和静态代码块中只能有静态成员,不能包含非静态成员,因为静态成员属于类,非静态成员属于对象。类被加载时,对象还没有被创建!
4、类加载的几种情况
1)创建对象时
2)子类被加载时,父类也会被加载
3)调用类中的静态成员时