Java 类初始化顺序

关于 Java 类初始化顺序记录。
					----摘自《Java 核心技术·卷一》。

Java 类包含内容

  1. 静态属性:static 定义的属性
  2. 静态方法块:使用 static { ··· } 描述的方法块,也称静态代码块
  3. 普通属性:未带static定义的属性
  4. 普通方法块:使用 { ··· } 描述的方法块,也称代码块
  5. 构造函数:类名相同的方法
  6. 方法:普通方法,也称函数

初始化顺序

public class LifeCycle {
    // 静态属性
    private static String staticField = getStaticField();
    // 静态方法块
    static {
        System.out.println(staticField);
        System.out.println("静态方法块初始化");
        System.out.println("Static Patch Initial");
    }
    // 普通属性
    private String field = getField();
    // 普通方法块
    {
        System.out.println(field);
        System.out.println("普通方法块初始化");
        System.out.println("Field Patch Initial");
    }
    // 构造函数
    public LifeCycle() {
        System.out.println("构造函数初始化");
        System.out.println("Structure Initial ");
    }

    public static String getStaticField() {
        String statiFiled = "Static Field Initial";
        System.out.println("静态属性初始化");
        return statiFiled;
    }

    public static String getField() {
        String filed = "Field Initial";
        System.out.println("普通属性初始化");
        return filed;
    }   
    // 主函数
    public static void main(String[] argc) {
        new LifeCycle();
    }
}

执行结果

静态属性初始化
Static Field Initial
静态方法块初始化
Static Patch Initial
普通属性初始化
Field Initial
普通方法块初始化
Field Patch Initial
构造函数初始化
Structure Initial 

总结(不同类的初始化顺序):

1、普通类

  • 静态变量
  • 静态代码块
  • 普通变量
  • 普通代码块
  • 构造函数

2、继承的子类

  • 父类静态变量
  • 父类静态代码块
  • 子类静态变量
  • 子类静态代码块
  • 父类普通变量
  • 父类普通代码块
  • 父类构造函数
  • 子类普通变量
  • 子类普通代码块
  • 子类构造函数

3、抽象的实现子类: 接口 - 抽象类 - 实现类

  • 接口静态变量
  • 抽象类静态变量
  • 抽象类静态代码块
  • 实现类静态变量
  • 实习类静态代码块
  • 抽象类普通变量
  • 抽象类普通代码块
  • 抽象类构造函数
  • 实现类普通变量
  • 实现类普通代码块
  • 实现类构造函数

Notice!

  • 声明的变量都是静态变量并且是final的,所以子类无法修改,并且是固定值不会因为实例而变化
  • 接口中能有静态方法,不能有普通方法,普通方法需要用defalut添加默认实现
  • 接口中的变量必须实例化
  • 接口中没有静态代码块、普通变量、普通代码块、构造函数

你可能感兴趣的:(Android,后端,Java)