logo

Защо нестатичната променлива не може да бъде реферирана от статичен контекст в Java

Грешката нестатичната променлива не може да бъде реферирана от статичен контекст в Java с който се сблъскват най-вече начинаещите по време на компилирането на Java програма. Причината за възникването на тази грешка е, че те използват нестатична членска променлива в метода main(). Тъй като методът main() в Java е статичен метод и се извиква автоматично, не е необходимо да създаваме обект, за да го извикаме. За да разберем грешката, първо трябва да разберем статичен и нестатичен метод в Java .

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

в Java , публичните методи принадлежат към екземпляр на клас, но ако говорим за статичен метод , те принадлежат към клас, а не към екземпляр на клас. Няма нужда от създаване на екземпляр на класа за извикване на статичен метод. Статичният член има достъп само до статичния член с данни и може да променя стойността му.

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

Всички методи, без да имате статичен ключова дума преди името на метода се наричат Нестатичен методи. Не е необходимо да създавате екземпляр на класа за достъп до статичния метод и статичната променлива. Нестатичните методи се използват динамично или по време на изпълнение. За разлика от статичен метод, можем да отменим нестатичен метод.

Нека създадем Java програма и генерираме същата грешка.

sdlc

В следващия пример сме декларирали частна променлива номер от тип int преди метода main(). В метода main() се опитваме да увеличим числото с 1. Трябва да се отбележи, че методът main() е статичен метод и променливата не е статична. Когато компилираме горната програма, получаваме същата грешка, както сме показали по-долу.

StaticExample1.java

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

Изход:

публична срещу частна java
Защо нестатичната променлива не може да бъде реферирана от статичен контекст в Java

Сега нека декларираме променливата номер като статичен и компилирайте кода. Обърнете внимание, че и променливата, и методът main() са статични.

StaticExample2.java

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

Изход:

Защо нестатичната променлива не може да бъде реферирана от статичен контекст в Java

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

Всеки екземпляр на нестатична променлива има различна стойност и се създава, когато операторът new() инициализира екземпляр на обект. Статичните променливи се създават или инициализират, когато класът се зареди JVM .

Имаме нужда от екземпляр на обект за извикване на нестатичната променлива. Можем да създадем много обекти, като даваме различни стойности на тази нестатична променлива или променлива на екземпляр.

низ съдържа

StaticExample3.java

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

Изход:

Защо нестатичната променлива не може да бъде реферирана от статичен контекст в Java

В горната програма три обекта, var1, var2, var3 , са създадени за класа променлива и присвои трите различни стойности 12, 13, 14 за обектите var1, var2 , и var3 , съответно. Сега, на номер свойството на всеки обект има своя собствена целочислена стойност. Когато се опитаме да увеличим стойността на свойството number чрез извикване на метода increment(), компилаторът не разбира за каква стойност на числото методът трябва да увеличи стойността. Компилаторът се сблъсква с грешката на неяснотата и извежда грешката по време на компилиране нестатичната променлива не може да бъде реферирана от статичен контекст .

Решение на грешката

Има един прост начин за решаване на нестатичната променлива не може да бъде реферирана от статичен контекст грешка. В горния код трябва да адресираме нестатичната променлива с името на обекта. По прост начин, трябва да създадем обект от класа, който да препраща към нестатична променлива от статичен контекст. Създава се ново копие на всички нестатични променливи, когато се създава нов екземпляр на променлива. Така че можем да осъществим достъп до тези променливи, като използваме препратката към новото копие на класа. например, разгледайте следната програма на Java.

скрити приложения

StaticExample4.java

 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 } } 

Изход:

Защо нестатичната променлива не може да бъде реферирана от статичен контекст в Java

Описание

В горната програма ние осъществяваме достъп до свойството номер, като използваме името на класа staticExample. Създаваме обект с името на класа StaticExample тест и увеличете стойност на числото с помощта на тестовия обект.