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

时间:2015-11-19 00:45:22

标签: android static oncreate static-block

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

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

MyClass由MyApplication(Extends Application)使用,位于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
  4. 是否有特殊原因导致静态块不先被执行? MyApplication onCreate方法会首先执行吗?

1 个答案:

答案 0 :(得分:7)

您的假设不准确。

当类加载时,将执行类中的静态块 - 这是在代码中第一次引用它时发生的。

如果你真的需要先执行静态块,你可以强制加载类 - 执行路径前面的Class.forName("com.foo.MyClassWithStaticFunctions")之类的东西会强制静态块更快地执行。