logo

Зашто се нестатичка променљива не може референцирати из статичког контекста у Јави

Грешка нестатичка променљива се не може референцирати из статичког контекста у Јави са којим се углавном суочавају почетници у време компилације Јава програма. Разлог за појаву ове грешке је тај што користе нестатичку променљиву члана у методи маин(). Пошто је маин() метод у Јави статичан метод и позива се аутоматски, не морамо да креирамо објекат да бисмо га позвали. Да бисмо разумели грешку, прво треба да разумемо статична и нестатична метод у Јави .

Статичка метода

Ин Јава , јавне методе припадају инстанци класе, али ако говоримо о статичка метода , они припадају класи, а не инстанци класе. Нема потребе за креирањем инстанце класе да бисте позвали статички метод. Статички члан може приступити само статичком члану података и може променити његову вредност.

Нестатична метода

Све методе без поседовања статична кључна реч пре имена методе се назива Нестатична методе. Нема потребе да се креира инстанца класе за приступ статичкој методи и статичкој променљивој. Нестатичке методе се користе динамичким или рунтиме везивањем. за разлику од статична метод, можемо заменити нестатична методом.

Хајде да направимо Јава програм и генеришемо исту грешку.

претворити цхар у инт јава

У следећем примеру, декларисали смо приватну променљиву број типа инт пре маин() методе. У методи маин() покушавамо да повећамо број за 1. Треба напоменути да је метода маин() статична метода и променљива није статична. Када компајлирамо горњи програм, добијамо исту грешку, као што смо показали у наставку.

СтатицЕкампле1.јава

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Излаз:

јава мапс
Зашто се нестатичка променљива не може референцирати из статичког контекста у Јави

Сада, хајде да декларишемо променљиву број као статички и компајлирајте код. Имајте на уму да су и променљива и метода маин() статични.

СтатицЕкампле2.јава

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Излаз:

Зашто се нестатичка променљива не може референцирати из статичког контекста у Јави

Програм се компајлира и успешно покреће.

Свака инстанца нестатичке променљиве има другачију вредност и креира се када оператор нев() иницијализује инстанцу објекта. Статичке променљиве се креирају или иницијализују када се класа учита ЈВМ .

Потребна нам је инстанца објекта за позивање нестатичке променљиве. Можемо креирати много објеката дајући различите вредности тој нестатичкој или инстанци променљивој.

онцлицк јс

СтатицЕкампле3.јава

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

Излаз:

Зашто се нестатичка променљива не може референцирати из статичког контекста у Јави

У горњем програму, три објекта, вар1, вар2, вар3 , креирани су за класу променљива и доделио три различите вредности 12, 13, 14 за објекте вар1, вар2 , и вар3 , редом. Сада број својство сваког објекта има своју целобројну вредност. Када покушамо да повећамо вредност својства броја позивањем методе инцремент(), компајлер не разуме за коју вредност броја метод треба да повећа вредност. Компајлер се суочава са грешком двосмислености и избацује грешку у времену компајлирања нестатичка променљива се не може референцирати из статичког контекста .

Решење за грешку

Постоји један једноставан начин за решавање нестатичка променљива се не може референцирати из статичког контекста грешка. У горњем коду, морамо да адресирамо нестатичку променљиву са именом објекта. На једноставан начин, морамо да креирамо објекат класе да упућује на нестатичку променљиву из статичког контекста. Нова копија свих нестатичких променљивих се креира када се креира нова инстанца променљиве. Дакле, можемо приступити овим варијаблама користећи референцу нове инстанце класе. на пример, размотрите следећи Јава програм.

сајтови попут цоомеет

СтатицЕкампле4.јава

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

Излаз:

Зашто се нестатичка променљива не може референцирати из статичког контекста у Јави

Опис

У горњем програму приступамо својству броја коришћењем имена класе статицЕкампле. Креирамо објекат са именом класе СтатицЕкампле тест и повећати вредност броја коришћењем тестног објекта.