البرمجة

تأثير استخدام static و final على المتغيرات في Java

عند دراسة البرنامج الذي قدمته، نجد أن لديك صف يسمى “Ideone” يحتوي على متغير ثابت “iop” من نوع int ويتم تعيين قيمة له داخل البناء (constructor) باستخدام الكلمة الرئيسية “final”. البرنامج يعمل بشكل صحيح دون استخدام كلمة “static” في تعريف المتغير “iop”.

أما عند إضافة كلمة “static” لتعريف المتغير “iop”، يظهر خطأ في الترجمة. لفهم هذا السلوك، يجب أن نتناول الفارق بين الكلمتين الرئيسيتين “static” و “final” وكيف تؤثر كل واحدة منهما على المتغير.

الكلمة الرئيسية “final” تشير إلى أن قيمة المتغير لا يمكن تغييرها بعد التعيين الأول. وفي هذا السياق، تم تعيين قيمة لـ “iop” داخل البناء، وبما أنها تملك الكلمة الرئيسية “final”، فإنها لا يمكن تغييرها بعد ذلك.

أما الكلمة الرئيسية “static”، فتشير إلى أن المتغير يتم مشاركته بين جميع الكائنات (instances) من الصف ويكون مرتبطًا بالصف نفسه بدلاً من أن يكون مرتبطًا بكل كائن على حدة. في هذا السياق، لا يمكن تعيين قيمة لمتغير “final” بوجود كلمة “static” إلا إذا تم تعيينها في الوقت الذي يتم فيه تعريف المتغير.

بإضافة “static”، يتعين عليك تعريف وتهيئة “iop” في وقت التعريف، وليس داخل البناء. يمكنك تعديل البرنامج كما يلي:

java
class Ideone { static final int iop = 56; // تعريف وتهيئة المتغير في وقت التعريف public Ideone() { System.out.println(iop); } public static void main(String[] args) throws java.lang.Exception { new Ideone(); } }

باستخدام هذا التعديل، يجب أن يعمل البرنامج بدون أخطاء، ويتم طباعة قيمة “iop” كالمتوقع.

المزيد من المعلومات

في البرنامج الذي قدمته، تجد أن لديك صف (class) يسمى “Ideone”، وهو صف يحتوي على متغير ثابت يسمى “iop” من نوع int. هذا المتغير يتم تعيين قيمة له داخل البناء (constructor) باستخدام الكلمة الرئيسية “final”، وقد قمت بتقديم القيمة 56 له.

في الجزء الخاص بالدالة الرئيسية (main)، تقوم بإنشاء كائن (object) من الصف “Ideone” باستخدام “new Ideone()”، وهذا يؤدي إلى تنفيذ البناء وطباعة قيمة “iop” على الإخراج (output)، والتي يفترض أن تكون 56.

عند تحليل الخطأ الذي يظهر عند إضافة كلمة “static”، يمكن أن يكون السبب هو أنك لا تقوم بتهيئة “iop” داخل البناء الذي تستخدمه في الصف. بمعنى آخر، عندما تستخدم “static” للمتغير، يجب عليك تهيئته في وقت التعريف.

تحتاج إلى فهم أن الكلمة “static” تجعل المتغير يتبع الصف نفسه بدلاً من كل كائن. لذا، عندما تعيّن قيمة لمتغير “final” مع “static”، يجب أن تتم هذه التهيئة في نفس سطر تعريف المتغير، كما هو موضح في الكود الذي قدمته في الإجابة السابقة.

إذا كنت ترغب في المزيد من المعلومات أو كان لديك أسئلة إضافية، فأنا هنا للمساعدة.

زر الذهاب إلى الأعلى