Java 在静态块中使用实例变量
这段代码会导致运行时错误吗?(已经使用了一些android库,但我不认为这是特定于平台的) 令人困惑的是,在使用eclipse调试器时Java 在静态块中使用实例变量,java,static,Java,Static,这段代码会导致运行时错误吗?(已经使用了一些android库,但我不认为这是特定于平台的) 令人困惑的是,在使用eclipse调试器时 A.getContext() 计算结果为非null值 然而 anotherContext 计算结果为null 有人知道这种行为吗? 谢谢 编辑: 糟糕的是,sContext是一个静态变量,但它只在实例方法中被赋值,如中所示 public void onCreate() { sContext = getApplicationContext(); } 那么在
A.getContext()
计算结果为非null值
然而
anotherContext
计算结果为null
有人知道这种行为吗?
谢谢
编辑:
糟糕的是,sContext是一个静态变量,但它只在实例方法中被赋值,如中所示
public void onCreate()
{
sContext = getApplicationContext();
}
那么在这种情况下,行为会是什么呢?这甚至不会编译。它会给你错误 “无法从静态上下文引用非静态变量”
因为您试图从静态块访问实例变量,所以如果
初始值设定项块
是非静态的,或者变量是静态的
,它将不起作用,那么这将运行anotherContext
不是静态的,因此无法从静态方法getContext
中检索。如果要初始化上下文,请在静态初始化块中进行初始化。您无法从静态方法访问实例变量。记住,静态方法不知道类的任何特定实例化。它只是作为类的一种方法存在。换句话说,你的
public static Conext getContext() {
return sContext;
}
方法不知道实例
sContext
对象。否,它不会导致运行时错误。据我所知,它甚至不会编译。您试过了吗?错误:无法从静态上下文引用非静态变量sContext
public static Conext getContext() {
return sContext;
}