【问题标题】:Android - Static Block not being called first, why?Android - 没有首先调用静态块,为什么?
【发布时间】:2015-11-19 00:45:21
【问题描述】:

根据我对 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 方法吗?

【问题讨论】:

  • 您显示的代码属于哪个类?是在MyApplication 吗?是在DatabaseManager 吗?是在别的地方吗?
  • 其他地方,在 MyApplication 使用的类中

标签: android static oncreate static-block


【解决方案1】:

您的假设不准确。

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

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

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2017-01-23
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多