在静态块中使用实例变量

时间:2013-07-22 19:19:23

标签: java static

此代码会导致运行时错误吗? (已经使用了一些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();
}

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

3 个答案:

答案 0 :(得分:0)

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

  

“无法从静态上下文引用非静态变量”

因为你试图从静态块中访问一个实例变量,所以如果initializer block是非静态的或者变量是static,则会运行。

答案 1 :(得分:0)

它无效。 anotherContext不是静态的,因此无法从静态方法getContext中检索。如果要获取上下文,请在静态init块中执行此操作。

答案 2 :(得分:0)

您无法从静态方法访问实例变量。请记住,静态方法不了解您的类的任何特定实例。它通常作为你班级的一种方法存在。换句话说,你的

public static Conext getContext() {
    return sContext;
}

Method不了解实例sContext对象。