类各个成员的初始化顺序
基础学习,对于初学者理解有一定的帮助。
问题描述: 类的各个成员的初始化顺序,简单的理解就是一个类在加载、实例化时候的执行顺序其中包括静态成员变量、静态成员函数、静态语句块、一般成员变量、一般成员函数、构造函数。
先给出测试结果:静态成员函数—>静态成员变量—>静态语句块(类加载的时候)
成员函数—>成员变量—>构造函数(类实例化的时候)
所以总的来说执行顺序是(并且遵循先父类后子类的原则):
静态成员函数—>静态成员变量—>静态语句块—>成员函数—>成员变量—>构造函数
测试代码: 构造三个类Base(顶级父类)、SuperClass(一级子类)、SubClass(二级子类,也是测试类)。
Base类:这个类中包含了一个static成员变量、一般成员变量、静态语句块、无参的构造函数。
package org.iSun.heisedeyueya;public class SubClass extends SuperClass {public static int a2 = getStaticNum();public int b2 = getInstanceNum();public SubClass() {System.out.println("SubClass construct run ");}private int getInstanceNum() {System.out.println("SubClas Instance member init");return 2000;}private static int getStaticNum() {System.out.println("SubClass Static member init");return 1000;}static {System.out.println("SubClass Static run ");}public static void main(String[] args) {new SubClass();}}