1

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

我有一个调用静态函数的静态块,都在 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首先被执行吗?

4

1 回答 1

7

你的假设不准确。

类中的静态块在你的类被加载时执行——这在代码中第一次被引用时发生。

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

于 2015-11-19T00:58:08.713 回答