الخطأ لا يمكن الرجوع إلى متغير غير ثابت من سياق ثابت في Java يواجهها في الغالب المبتدئون في وقت تجميع برنامج Java. سبب حدوث هذا الخطأ هو أنهم يستخدمون متغير عضو غير ثابت في الطريقة الرئيسية (). نظرًا لأن الطريقة main() في Java هي طريقة ثابتة ويتم استدعاؤها تلقائيًا، فلا نحتاج إلى إنشاء كائن لاستدعائه. لكي نفهم الخطأ علينا أولا أن نفهم ثابتة و غير ساكنة الطريقة في جافا .
الطريقة الثابتة
في جافا ، الأساليب العامة تنتمي إلى مثيل للفئة ولكن إذا تحدثنا عنها طريقة ثابتة ، إنهم ينتمون إلى فئة وليس إلى مثيل لفئة. ليست هناك حاجة لإنشاء مثيل للفئة لاستدعاء طريقة ثابتة. يمكن للعضو الثابت الوصول إلى عضو البيانات الثابتة فقط ويمكنه تغيير قيمته.
طريقة غير ثابتة
جميع الأساليب دون الحاجة ثابتة تتم الإشارة إلى الكلمة الأساسية قبل اسم الطريقة باسم غير ساكنة طُرق. ليست هناك حاجة لإنشاء مثيل للفئة للوصول إلى الطريقة الثابتة والمتغير الثابت. يتم استخدام الطرق غير الثابتة للربط الديناميكي أو وقت التشغيل. على عكس ثابتة الطريقة، يمكننا تجاوز غير ساكنة طريقة.
لنقم بإنشاء برنامج Java ونقوم بإنشاء نفس الخطأ.
مخطط uml جافا
في المثال التالي، قمنا بتعريف متغير خاص رقم من النوع int قبل الطريقة الرئيسية (). في الطريقة main()، نحاول زيادة الرقم بمقدار 1. تجدر الإشارة إلى أن الطريقة main() هي طريقة ثابتة والمتغير ليس ثابتًا. عندما نقوم بتجميع البرنامج أعلاه، نحصل على نفس الخطأ، كما هو موضح أدناه.
StaticExample1.java
public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
انتاج:
الفرق بين الأسد والنمر
الآن دعونا نعلن عن المتغير رقم كثابت وتجميع التعليمات البرمجية. لاحظ أن المتغير والطريقة الرئيسية () كلاهما ثابت.
StaticExample2.java
class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
انتاج:
يتم تجميع البرنامج وتشغيله بنجاح.
بيثون نوع الصفوف
كل مثيل لمتغير غير ثابت له قيمة مختلفة ويتم إنشاؤه عندما يقوم عامل التشغيل 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); } }
انتاج:
في البرنامج أعلاه، ثلاثة كائنات، فار1، فار2، فار3 ، تم إنشاؤها للفئة عامل وقمنا بتعيين القيم الثلاث المختلفة 12، 13، 14 للكائنات فار1، فار2 ، و فار3 ، على التوالى. الآن، رقم خاصية كل كائن لها قيمة عددية خاصة بها. عندما نحاول زيادة قيمة خاصية الرقم عن طريق استدعاء طريقة الزيادة ()، لا يفهم المترجم قيمة الرقم التي يجب أن تزيد الطريقة القيمة. يواجه المترجم خطأ الغموض ويلقي خطأ وقت الترجمة لا يمكن الرجوع إلى متغير غير ثابت من سياق ثابت .
الحل للخطأ
هناك طريقة واحدة بسيطة لحل المشكلة لا يمكن الرجوع إلى متغير غير ثابت من سياق ثابت خطأ. في الكود أعلاه، علينا معالجة المتغير غير الثابت باسم الكائن. بطريقة بسيطة، يتعين علينا إنشاء كائن من الفئة للإشارة إلى متغير غير ثابت من سياق ثابت. يتم إنشاء نسخة جديدة من كافة المتغيرات غير الثابتة عند إنشاء مثيل جديد للمتغير. لذلك، يمكننا الوصول إلى هذه المتغيرات باستخدام مرجع المثيل الجديد للفئة. على سبيل المثال، فكر في برنامج Java التالي.
برمجة int c غير الموقعة
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 } }
انتاج:
وصف
في البرنامج أعلاه، يمكننا الوصول إلى خاصية الرقم باستخدام اسم الفئة staticExample. نقوم بإنشاء كائن باسم فئة StaticExample امتحان وزيادة قيمة الرقم باستخدام كائن الاختبار.