Android - 静态块没有被首先调用,为什么?

Android - Static Block not being called first, why?

根据我的 Java 理解,静态块应该在任何其他函数之前执行。

我有一个调用静态函数的静态块,都在 class MyClass.java 中,它使用 SharedPreferences 对象。

MyClass 由 MyApplication(扩展应用程序)使用,位于 onCreateMethod 的某处。

static {
    doSomethingStaticFirst();
}

private static void doSomethingStaticFirst() {

        //Log(DO_SOMETHING_STATIC_FIRST)

        UserPreferences userPreferences = new UserPreferences(MyApplication.getInstance().getApplicationContext());
}

但是我看到了以下日志的顺序:

  1. MyApplication onCreate 方法
  2. DatabaseManager onUpdate(以防数据库版本增加)
  3. DO_SOMETHING_STATIC_FIRST

没有先执行静态块有什么特别的原因吗? MyApplication onCreate 方法会优先执行吗?

您的假设不准确。

class 中的静态块在您的 class 被 加载时执行 - 这是第一次在代码中引用它。

如果您确实需要让静态块更早执行,您可以强制加载 class - 执行路径中较早的 Class.forName("com.foo.MyClassWithStaticFunctions") 之类的内容将强制静态块更早执行。