logo

Чому на нестатичну змінну не можна посилатися зі статичного контексту в Java

Помилка на нестатичну змінну не можна посилатися зі статичного контексту в Java з якою стикаються в основному новачки під час компіляції програми на Java. Причиною виникнення цієї помилки є те, що вони використовують нестатичну змінну-член у методі main(). Оскільки метод main() у Java є статичним методом і викликається автоматично, нам не потрібно створювати об’єкт для його виклику. Щоб зрозуміти помилку, спочатку ми повинні зрозуміти статичний і нестатичний метод у Java .

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

в Java , публічні методи належать до екземпляра класу, але якщо говорити про статичний метод , вони належать до класу, а не до екземпляра класу. Немає необхідності створювати екземпляр класу для виклику статичного методу. Статичний елемент може отримати доступ лише до статичного елемента даних і змінити його значення.

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

Всі методи без наявності статичний ключове слово перед назвою методу називається Нестатичний методи. Немає необхідності створювати екземпляр класу для доступу до статичного методу та статичної змінної. У нестатичних методах використовується динамічне або виконання зв’язування. На відміну від статичний метод, ми можемо замінити нестатичний метод.

Давайте створимо програму Java і згенеруємо ту саму помилку.

c програмування прикладів програм

У наступному прикладі ми оголосили приватну змінну номер типу 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); } } 

Вихід:

str до внутр
Чому на нестатичну змінну не можна посилатися зі статичного контексту в 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.

plsql

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

опис

У наведеній вище програмі ми отримуємо доступ до властивості number за допомогою імені класу staticExample. Створюємо об’єкт з іменем класу StaticExample тест і збільшити значення числа за допомогою тестового об’єкта.