2013-07-22 2 views
-3

이 코드는 런타임 오류가 발생합니까? 정적 블록에서 인스턴스 변수 사용

A.getContext() 

은 null이 아닌 값으로 평가, (일부 안드로이드 라이브러리를 사용했다,하지만 난이 특정 플랫폼 생각하지 않습니다)

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(); 

    } 
} 

일식 디버거를 사용할 때 혼란스러운 부분입니다.

그러나

anotherContext 

사람이이 문제에 대한 어떤 생각을 가지고 있습니까 null로 평가? 감사

편집 :

내 나쁜

이 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에서 검색 할 수 없습니다. 컨텍스트를 초기화하려면 정적 초기화 블록을 사용하십시오.

0

정적 메서드에서 인스턴스 변수에 액세스 할 수 없습니다. 정적 메서드는 클래스의 특정 인스턴스화에 대한 지식이 없음을 기억하십시오. 그것은 단지 일반적으로 클래스의 메소드로서 존재합니다. 즉, 당신의

public static Conext getContext() { 
    return sContext; 
} 

방법은 예를 sContext 개체의 지식이 없습니다.