2013-07-22 5 views
-3

Будет ли этот код приводить к ошибке времени выполнения? (Использовал некоторый андроид библиотеки, но я не думаю, что это зависит от платформы)с использованием переменной экземпляра в статическом блоке

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

    } 
} 

Запутанной часть при использовании затмения отладчика,

A.getContext() 

вычисляется в ненулевое значение.

Однако

anotherContext 

оценивает обнулить

Кто-нибудь есть представление об этом поведении? Благодаря

Edit:

Мой плохо, 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 объекта.

Смежные вопросы