-3

此代码会导致运行时错误吗?(使用了一些 android 库,但我不认为这是特定于平台的)

class A
{
Context sContext;      
public A()
   {
   //initialize sContext here
   }
 public static Conext getContext()
   {
   return sContext;
   }
}

class B
{
 public static Context anotherContext;
static
  {
   anotherContext = A.getContext();

  }
}

令人困惑的部分是在使用 eclipse 调试器时,

A.getContext()

计算为非空值。

然而

anotherContext 

评估为 null

有人对这种行为有任何想法吗?谢谢

编辑 :

我的错, sContext 是一个静态变量,但它仅在实例方法中被赋值,如

public void onCreate()
{
sContext = getApplicationContext();
}

那么在这种情况下,行为会是什么?

4

3 回答 3

0

这甚至不会编译。它会给你错误

“不能从静态上下文中引用非静态变量”

因为您正在尝试从静态块访问实例变量,所以如果initializer block非静态或变量是static.

于 2013-07-22T19:22:48.680 回答
0

它行不通。anotherContext不是静态的,因此无法从静态方法中检索getContext。如果要初始化上下文,请在静态初始化块中进行。

于 2013-07-22T19:23:57.687 回答
0

您不能从静态方法访问实例变量。请记住,静态方法不知道您的类的任何特定实例化。它通常只是作为您的类的一种方法存在。换句话说,你的

public static Conext getContext() {
    return sContext;
}

方法不知道实例sContext对象。

于 2013-07-22T19:23:59.520 回答