我可以从静态上下文中调用静态成员的实例方法吗?

时间:2013-08-22 09:05:29

标签: java android eclipse static

我有以下代码:

private static AppWidgetService mInstance = null;

public static void startRefresh() {

        AppWidgetProvider.setRefreshingState(mInstance
                .getApplicationContext());
        AppWidgetManager.refreshHandler(mInstance.getApplicationContext());
    }

它有时会在运行时失败,有时会通过。

对于obviuse例外:

cannot call a non-static method from a static context

我很困惑,因为mInstance是静态的,

因此可以从静态上下文调用其实例方法。没有?

然后,如果有时会失败?

2 个答案:

答案 0 :(得分:1)

从静态函数中,您只能调用静态函数或使用静态变量。链接在运行时完成。因此,尽管您的编译会很好,但在运行时它会在调用时失败。如果你想打电话,请尝试使你的功能非静态。

OR

从静态方法调用非静态方法的唯一方法是让类的实例包含非静态方法。根据定义,非静态方法是在某个类的实例上调用的方法,而静态方法属于类本身。

答案 1 :(得分:0)

从非静态块/方法调用静态方法时会出现此问题。在您的代码中,'setRefreshingState()'和'refreshHandler()'都是静态方法。要调用这些方法,您必须从方法定义中删除静态。