2013-07-22 85 views
-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 

值爲空

沒有人有這種行爲的任何想法? 感謝

編輯:

我的壞,sContext是一個靜態變量,但它正在所以在這種情況下,只有在實例方法分配一個值作爲

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

會是什麼行爲是?

+2

不,它不會導致運行時錯誤。就我所知,它甚至不會編譯。你試過了嗎? – iamnotmaynard

+0

'錯誤:非靜態變量sContext不能從靜態上下文中引用' –

回答

0

這甚至不會編譯。它會給你錯誤

"non-static variable cannot be referenced from a static context"

,因爲你正試圖從靜態塊訪問實例變量,這一切都運行有initializer block了非靜態或變量分別爲static

0

它不起作用。 anotherContext不是靜態的,所以不能從靜態方法getContext中檢索。如果你想獲得被引用的上下文,那麼在一個靜態init塊中進行。

0

您無法從靜態方法訪問實例變量。請記住,靜態方法不瞭解您的類的任何特定實例。它只是作爲你的課堂的一種方法而存在。換句話說,您的

public static Conext getContext() { 
    return sContext; 
} 

方法不知道實例sContext對象。