Static تعني "عامة" أو "ثابتة" وتستخدم لتعديل متغيرات الأعضاء وأساليب الأعضاء ويمكنها أيضًا تشكيل كتلة تعليمات برمجية ثابتة، ولكن لا يوجد مفهوم للمتغيرات العامة في لغة Java.
تعد متغيرات الأعضاء وأساليب الأعضاء المعدلة بواسطة ثابت مستقلة عن أي كائنات من الفئة. أي أنه لا يعتمد على مثيل معين للفئة ويتم مشاركته من قبل كافة مثيلات الفئة.
طالما تم تحميل هذه الفئة، يمكن لجهاز Java الظاهري العثور عليها بشكل افتراضي في منطقة الطريقة بمنطقة بيانات وقت التشغيل بناءً على اسم الفئة. لذلك، يمكن الوصول إلى كائن ثابت قبل إنشاء أي من كائناته، دون الرجوع إلى أي كائنات.
تعد متغيرات الأعضاء الثابتة وأساليب الأعضاء المعدلة باستخدام public متغيرات عامة وأساليب عامة بشكل أساسي. عندما يتم الإعلان عن كائن من فئته، لا يتم إنشاء نسخة من المتغير الثابت، ولكن جميع مثيلات الفئة تشترك في نفس المتغير الثابت.
يمكن أن يسبق المتغير الثابت تعديل خاص، مما يعني أنه يمكن استخدام هذا المتغير في كتلة التعليمات البرمجية الثابتة للفئة، أو في أساليب الأعضاء الثابتة الأخرى للفئة (بالطبع، يمكن استخدامه أيضًا في غير ثابتة أساليب الأعضاء)، ولكن لا يمكن استخدامها في فئات أخرى، فمن المهم الإشارة مباشرة إلى اسم الفئة. في الواقع، عليك أن تفهم أن الخاص يعني تقييد إذن الوصول، والثابت يعني أنه يمكن استخدامه دون إنشاء مثيل، وهو أمر أسهل بكثير في الفهم. تأثير إضافة كلمات رئيسية أخرى لأذونات الوصول قبل الثابت هو نفسه أيضًا.
تسمى عادة متغيرات الأعضاء وأساليب الأعضاء التي تم تعديلها بواسطة ثابت بالمتغيرات الثابتة والأساليب الثابتة، ويمكن الوصول إليها مباشرة من خلال اسم الفئة.
اسم الفئة اسم الطريقة الثابتة (قائمة المعلمات...)
اسم الفئة. اسم المتغير الثابت
تمثل كتلة التعليمات البرمجية المعدلة بالثابت كتلة تعليمات برمجية ثابتة. عندما يقوم Java Virtual Machine (JVM) بتحميل فئة، سيتم تنفيذ كتلة التعليمات البرمجية (مفيدة جدًا، هاها).
1. متغير ثابت
يمكن تصنيف متغيرات أعضاء الفئة إلى نوعين وفقًا لما إذا كانت ثابتة: أحدهما متغير تم تعديله بواسطة ثابت، ويسمى متغير ثابت أو متغير فئة؛ والآخر متغير لم يتم تعديله بواسطة ثابت، ويسمى متغير المثيل.
الفرق بين الاثنين هو:
بالنسبة للمتغيرات الثابتة، توجد نسخة واحدة فقط في الذاكرة (لحفظ الذاكرة). يخصص JVM الذاكرة مرة واحدة فقط للمتغيرات الثابتة أثناء عملية تحميل الفصل، ويمكن الوصول إليها مباشرة اسم الفئة (مريح)، بالطبع، يمكن الوصول إليه أيضًا من خلال الكائنات (لكن هذا غير مستحسن).
بالنسبة لمتغيرات المثيل، قبل إنشاء المثيل، سيتم تخصيص الذاكرة مرة واحدة لمتغير المثيل، ويمكن أن تحتوي على نسخ متعددة في الذاكرة دون التأثير على بعضها البعض (مرن).
لذلك، يتم استخدام المتغيرات الثابتة بشكل عام عند الحاجة إلى تنفيذ الوظيفتين التاليتين:
1).عند مشاركة القيم بين الكائنات
2).عندما يكون الوصول إلى المتغيرات مناسبًا
2. الطريقة الثابتة
يمكن استدعاء الأساليب الثابتة مباشرة من خلال اسم الفئة، ويمكن أيضًا استدعاء أي مثيل.
لذلك، لا يمكن استخدام الكلمات الأساسية this وsuper في الطرق الثابتة، ولا يمكن الوصول مباشرة إلى متغيرات المثيل وطرق المثيل للفئة التي تنتمي إليها (أي متغيرات الأعضاء وأساليب الأعضاء التي لا تحتوي على متغيرات الأعضاء الثابتة و يمكن الوصول إلى أساليب الأعضاء للفئة التي ينتمون إليها.
لأن أعضاء المثيل مرتبطون بكائنات محددة! وهذا يحتاج إلى فهم واكتشاف، وليس حفظه! ! !
نظرًا لأن الطرق الثابتة مستقلة عن أي مثيل، يجب تنفيذ الطرق الثابتة ولا يمكن أن تكون مجردة.
على سبيل المثال، من أجل تسهيل استدعاء الأسلوب، تكون جميع الأساليب الموجودة في فئة Math في Java API ثابتة، كما تسهل الطرق الثابتة ضمن الفئات العامة أيضًا الفئات الأخرى من استدعاء الطريقة.
الطريقة الثابتة هي نوع خاص من الطرق داخل الفصل، ويتم تعريف الطريقة المقابلة بأنها ثابتة فقط عند الحاجة إليها، وعادةً ما تكون الطرق غير ثابتة.
3. كتلة التعليمات البرمجية الثابتة
يُطلق على كتلة التعليمات البرمجية الثابتة أيضًا كتلة تعليمات برمجية ثابتة وهي عبارة عن كتلة بيان ثابتة في فئة مستقلة عن أعضاء الفئة ويمكن وضعها في أي مكان سيتم تنفيذه عندما يقوم JVM بتحميل الفصل، إذا كان هناك العديد من كتل التعليمات البرمجية الثابتة، فسيقوم JVM بتنفيذها بالترتيب الذي تظهر به في الفصل، وسيتم تنفيذ كل كتلة تعليمات برمجية مرة واحدة فقط. على سبيل المثال:
public class Test5 { Private static int a; static{ System.out.println(a); println(tb); } static{ Test5.a=4; إنشاء بذرة الطريقة تلقائيًا} static{ Test5.a=5;
نتائج التشغيل:
3
ههههههههه
1000
4
5
يمكنك استخدام كتل التعليمات البرمجية الثابتة لتعيين قيم لبعض المتغيرات الثابتة. وأخيرًا، ألق نظرة على هذه الأمثلة. تحتوي جميعها على طريقة رئيسية ثابتة، بحيث يمكن لـ JVM الاتصال بها مباشرة دون إنشاء مثيل عند تشغيل الطريقة الرئيسية .
4. ماذا يعني الثابت والنهائي عند استخدامهما معًا؟
يتم استخدام النهائي الثابت لتعديل متغيرات الأعضاء وأساليب الأعضاء، والتي يمكن فهمها ببساطة على أنها "ثوابت عالمية"!
بالنسبة للمتغيرات، فهذا يعني أنه بمجرد إعطاء قيمة، لا يمكن تعديلها ويمكن الوصول إليها من خلال اسم الفئة.
بالنسبة للطرق، فهذا يعني أنها غير قابلة للتجاوز ويمكن الوصول إليها مباشرة من خلال اسم الفئة.
في بعض الأحيان تريد تعريف عضو فئة بحيث يكون استخدامه مستقلاً تمامًا عن أي كائنات من تلك الفئة. عادةً، يجب الوصول إلى عضو الفئة من خلال كائن من فئته، ولكن من الممكن إنشاء عضو يمكن استخدامه بمفرده دون الرجوع إلى مثيل محدد. يمكن إنشاء مثل هذا العضو عن طريق إضافة الكلمة الأساسية static (static) قبل إعلان العضو. إذا تم تعريف العضو بأنه ثابت، فيمكن الوصول إليه قبل إنشاء أي كائن من فئته دون الحاجة إلى الإشارة إلى أي كائن. يمكنك إعلان كل من الأساليب والمتغيرات على أنها ثابتة. المثال الأكثر شيوعًا للعضو الثابت هو main(). نظرًا لأنه يجب استدعاء main() عند بدء تنفيذ البرنامج، فسيتم تعريفه على أنه ثابت.
المتغيرات المعلنة ثابتة هي في الأساس متغيرات عالمية. عندما يتم الإعلان عن كائن، لا يتم إنتاج نسخة من المتغير الثابت، ولكن جميع متغيرات المثيل للفئة تشترك في نفس المتغير الثابت. الأساليب المعلن عنها ثابتة لها القيود التالية:
1).يمكنهم فقط استدعاء الطرق الثابتة الأخرى.
2). يمكنهم فقط الوصول إلى البيانات الثابتة.
3). لا يمكنهم الإشارة إلى هذا أو سوبر بأي شكل من الأشكال (كلمة سوبر مرتبطة بالميراث وسيتم شرحها في الفصل التالي).
إذا كنت بحاجة إلى تهيئة المتغيرات الثابتة الخاصة بك من خلال الحساب، فيمكنك إعلان كتلة ثابتة. يتم تنفيذ الكتلة الثابتة مرة واحدة فقط عند تحميل الفصل. يوضح المثال التالي فئة ذات طريقة ثابتة، وبعض المتغيرات الثابتة، وكتلة مُهيئ ثابتة:
// عرض المتغيرات والأساليب والكتل الثابتة. class UseStatic { static int a = 3; static void meth(int x) { System.out.println("x = " + x); println("a = " + a); System.out.println("b = " + b } static { System.out.println("تهيئة الكتلة الثابتة."); } public static void main(String args[]) { meth(42);
بمجرد تحميل فئة UseStatic، سيتم تشغيل كافة البيانات الثابتة. أولاً، يتم تعيين a على 3، ثم يتم تنفيذ الكتلة الثابتة (طباعة رسالة)، وأخيرًا، تتم تهيئة b إلى a*4 أو 12. بعد ذلك يتم استدعاء main()، واستدعاء main() meth()، وتمرير القيمة 42 إلى x. تشير عبارات println () الثلاثة إلى متغيرين ثابتين a وb، والمتغير المحلي x.
ملاحظة: من غير القانوني الإشارة إلى أي متغيرات مثيلة بطريقة ثابتة.
هنا هو إخراج هذا البرنامج:
انسخ رمز الكود كما يلي:
تمت تهيئة الكتلة الثابتة.
س = 42
أ = 3
ب = 12
يمكن استخدام الأساليب والمتغيرات الثابتة بشكل مستقل عن أي كائن خارج الفئة التي تم تعريفها فيها. بهذه الطريقة، يمكنك فقط إضافة عامل النقطة بعد اسم الفئة. على سبيل المثال، إذا كنت ترغب في استدعاء أسلوب ثابت من خارج الفئة، يمكنك استخدام التنسيق العام التالي:
انسخ رمز الكود كما يلي:
classname.method()
هنا، اسم الفئة هو اسم الفئة التي تم تعريف الطريقة الثابتة فيها. كما ترون، هذا التنسيق مشابه لتنسيق استدعاء الأساليب غير الثابتة من خلال المتغيرات المرجعية للكائنات. يمكن الوصول إلى متغير ثابت بنفس التنسيق - اسم الفئة متبوعًا بعامل النقطة. هذه هي الطريقة التي تنفذ بها Java نسخة خاضعة للرقابة من الوظائف العامة والمتغيرات العامة.
أدناه مثال. في main()، يتم الوصول إلى الأسلوب الثابت callme() والمتغير الثابت b خارج فئاتهما.
class StaticDemo { static int a = 42; static int b = 99; static void callme() { System.out.println("a = " } } class StaticByName { public static void main(String args[]) { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b);
هنا هو إخراج هذا البرنامج:
انسخ رمز الكود كما يلي:
أ = 42
ب = 99
لا يمكن الوصول إلى الأعضاء الثابتين عن طريق المثيلات التي أنشأتها فئتهم.
إذا كان الأعضاء الذين لم يتم تعديلهم ثابتًا هم أعضاء كائن، فإنهم مملوكون لكل كائن.
الأعضاء الذين تم تعديلهم باستخدام static هم أعضاء فئة، مما يعني أنه يمكن استدعاؤهم مباشرة بواسطة فئة ويكونون مشتركين بين جميع الكائنات.