الكلمة الأساسية الثابتة هي كلمة رئيسية يواجهها العديد من الأصدقاء عند الكتابة وقراءة التعليمات البرمجية. إنها أيضًا واحدة من نقاط المعرفة التي يحبها المقابلات من الشركات الكبرى أن يسألوا أثناء المقابلات. دعنا نتحدث أولاً عن استخدام الكلمات الرئيسية الثابتة وسوء الفهم الشائع. أخيرًا ، ندرج بعض الأسئلة الشائعة حول Static في المقابلة المكتوبة. هنا هو الخطوط العريضة لهذا المقال:
1. الغرض من الكلمات الرئيسية الثابتة
2. المفاهيم الخاطئة للكلمات الرئيسية الثابتة
3. أسئلة مكتوبة مشتركة
إذا كان هناك أي خطأ ، آمل أن أفهم ونرحب بالنقد والتصحيح.
يرجى احترام الإنجازات العمالية للمؤلف. يرجى الإشارة إلى الرابط الأصلي عند إعادة الطباعة:
http://www.cnblogs.com/dolphin0520/p/3799052.html
1. الغرض من الكلمات الرئيسية الثابتة
"الطريقة الثابتة هي طريقة بدون هذا. لا يمكن استدعاء الطرق غير القاتلة داخل الطريقة الثابتة ، وهو ما يمكن بدوره ممكنًا. ويمكن استدعاء الطريقة الثابتة فقط من خلال الفصل نفسه دون إنشاء أي كائن. هذا هو في الواقع الغرض الرئيسي للطريقة الثابتة."
على الرغم من أن هذا المقطع يوضح فقط الميزات الخاصة للطريقة الثابتة ، إلا أنه يمكن ملاحظة أن الوظيفة الأساسية للكلمة الرئيسية الثابتة. باختصار ، يوصف في جملة واحدة:
من المريح الاتصال (الطريقة/المتغير) دون إنشاء كائن.
من الواضح أن الأساليب أو المتغيرات المعدلة بواسطة الكلمات الرئيسية الثابتة لا تحتاج إلى الاعتماد على كائنات للوصول. طالما تم تحميل الفصل ، يمكن الوصول إليها من خلال اسم الفصل.
يمكن استخدام ثابت لتعديل أساليب عضو الفئة ومتغيرات أعضاء الفصل. بالإضافة إلى ذلك ، يمكن كتابة كتل التعليمات البرمجية الثابتة لتحسين أداء البرنامج.
1) طريقة ثابتة
تسمى الطريقة الثابتة بشكل عام طريقة ثابتة. نظرًا لأنه يمكن الوصول إلى الطرق الثابتة دون الاعتماد على أي كائن ، لا يوجد هذا للطرق الثابتة لأنه لا يعتمد على أي كائن. نظرًا لعدم وجود أشياء ، لا يوجد شيء مثل هذا. وبسبب هذه الميزة ، لا يمكن الوصول إلى متغيرات الأعضاء غير الاصطناعية وطرق الأعضاء غير المنتظمة للفصل في طرق ثابتة ، لأن أساليب/متغيرات الأعضاء غير الستاصلة يجب أن تعتمد على كائنات محددة ليتم استدعاؤها.
ولكن تجدر الإشارة إلى أنه على الرغم من أنه لا يمكن الوصول إلى أساليب الأعضاء غير الستاصلة والمتغيرات غير المنتظمة في الطرق الثابتة ، إلا أنه يمكن الوصول إلى أساليب/متغيرات الأعضاء الثابتة في أساليب الأعضاء غير القتالية. دعونا نعطي مثالًا بسيطًا:
في الكود أعلاه ، نظرًا لأن طريقة print2 موجودة بشكل مستقل عن الكائن ، يمكن استدعاؤه مباشرة بواسطة اسم الفصل. إذا كان من الممكن الوصول إلى الطرق/المتغيرات غير الاستقليوية في طرق ثابتة ، فإذا كان هناك العبارة التالية في الطريقة الرئيسية:
myobject.print2 () ؛
في هذا الوقت ، لا يوجد شيء ، و STR2 غير موجود على الإطلاق ، لذلك سيكون هناك تناقض. وينطبق الشيء نفسه على الأساليب. نظرًا لأنه لا يمكنك التنبؤ بما إذا كان يتم الوصول إلى متغيرات الأعضاء غير المنتظمة في طريقة PRINT1 ، فإن الوصول إلى أساليب الأعضاء غير القتالية في أساليب الأعضاء الثابتة محظور أيضًا.
وبالنسبة لطرق الأعضاء غير الستاصلة ، من الواضح أنه غير محدود للوصول إلى أساليب/متغيرات الأعضاء الثابتة.
لذلك ، إذا كنت ترغب في استدعاء طريقة دون إنشاء كائن ، فيمكنك تعيين هذه الطريقة على ثابت. الطريقة الثابتة الأكثر شيوعا هي الطريقة الرئيسية. أما السبب في أن الطريقة الرئيسية يجب أن تكون ثابتة ، فمن الواضح جدًا الآن. نظرًا لأن البرنامج لا ينشئ أي كائن عند تنفيذ الطريقة الرئيسية ، لا يمكن الوصول إليه إلا من خلال اسم الفصل.
تذكر أيضًا أنه حتى لو لم يتم عرضها على أنها ثابتة ، فإن مُنشئ الفصل هو في الواقع طريقة ثابتة.
2) المتغيرات الثابتة
وتسمى المتغيرات الثابتة أيضا المتغيرات الثابتة. الفرق بين المتغيرات الثابتة والمتغيرات غير القديم هو أن المتغيرات الثابتة تتم مشاركتها بواسطة جميع الكائنات ، مع نسخة واحدة فقط في الذاكرة ، والتي سيتم تهيئتها إذا وفقط عند تحميل الفئة لأول مرة. تملك المتغيرات غير المتوقفة بواسطة كائنات ويتم تهيئتها عند إنشاء كائنات. هناك نسخ متعددة ، ولا تؤثر النسخ التي يملكها كل كائن على بعضها البعض.
تتم تهيئة ترتيب تهيئة المتغيرات الأعضاء الثابتة بالترتيب المحدد.
3) كتلة رمز ثابت
وظيفة مفتاح أخرى للكلمة الأساسية الثابتة هي تكوين كتل رمز ثابت لتحسين أداء البرنامج. يمكن وضع الكتلة الثابتة في أي مكان في الفصل ، ويمكن أن تكون هناك كتل ثابتة متعددة في الفصل. عند تحميل الفصل لأول مرة ، سيتم تنفيذ كل كتلة ثابتة بترتيب الكتل الثابتة وسيتم تنفيذها مرة واحدة فقط.
السبب في أنه يمكن استخدام الكتل الثابتة لتحسين أداء البرنامج بسبب خصائصه: سيتم تنفيذها إلا مرة واحدة عند تحميل الفصل. هنا مثال:
شخص فئة {تاريخ المواليد الخاص ؛ الشخص العام (تاريخ المواليد) {this.birthDate = birthdate ؛} Boolean Isbornboomer () {date startDate = date.valueof ("1946") ؛ dateddate = date.valueof ("1964") ؛ 0 ؛}} يستخدم Isbornboomer ما إذا كان هذا الشخص قد ولد في 1946-1964. في كل مرة يتم فيها استدعاء Isbornboomer ، سيتم إنشاء كائنين ، مما سيؤدي إلى مضيعة للمساحة. إذا تغيرت إلى هذا ، فسيكون ذلك أفضل:
شخص فئة {تاريخ ميلاد خاص تاريخ الولادة ؛ بداية تاريخ ثابت ، enddate ؛ static {startDate = date.valueof ("1946") ؛ enddate = date.valueof ("1964") ؛} public} birthday.compareto (enddate) <0 ؛}} لذلك ، في كثير من الأحيان ، سيتم وضع بعض عمليات التهيئة التي يجب تنفيذها إلا مرة واحدة في كتلة التعليمات البرمجية الثابتة.
2. المفاهيم الخاطئة للكلمات الرئيسية الثابتة
1. هل ستغير الكلمة الرئيسية الثابتة حقوق الوصول للأعضاء في الفصل؟
سوف يخلط بعض المبتدئين الثابت في Java مع وظائف الكلمات الرئيسية الثابتة في C/C ++. فقط تذكر شيئًا واحدًا هنا: على عكس ثابت في C/C ++ ، لن تؤثر الكلمة الرئيسية الثابتة في Java على نطاق المتغيرات أو الأساليب. في Java ، فإن الكلمات الرئيسية الوحيدة التي يمكن أن تؤثر على أذونات الوصول هي خاصة وعامة ومحمية (بما في ذلك أذونات الوصول إلى الحزمة). انظر إلى الأمثلة التالية لفهم:
الخطأ المذهل "الشخص. القاعدة غير مرئية" ، مما يعني أن الكلمة الرئيسية الثابتة لا تغير أذونات الوصول للمتغيرات والأساليب.
2. هل يمكن الوصول إلى متغيرات الأعضاء الثابتة من خلال هذا؟
على الرغم من عدم وجود هذا للطرق الثابتة ، هل يمكن الوصول إلى متغيرات الأعضاء الثابتة من خلال هذا في الأساليب غير الستاطية؟ دعونا نلقي نظرة أولاً على المثال التالي. ما هي نتيجة إخراج الرمز هذا؟
الفئة العامة الرئيسية {static int value = 33 ؛ يرمي الفراغ الثابت العام (سلسلة [] args) الاستثناء {new main (). printvalue () ؛} private void printvalue () {int value = 3 ؛ system.out.println (this.value) ؛}} 33
هذا هو أساسا فريق المراقبة الرئيسي لفهم هذا وثابت. ماذا يقف هذا؟ هذا يمثل الكائن الحالي. إذا تم استدعاء قيمة printValue من خلال New Main () ، فإن الكائن الحالي هو الكائن الذي تم إنشاؤه بواسطة New Main (). يتم الاستمتاع بالمتغير الثابت بواسطة الكائن ، وبالتالي فإن قيمة هذا. القيمة في القيمة المطبوعة هي بلا شك 33. القيمة داخل طريقة printvalue هي متغير محلي ولا يمكن أن يرتبط بهذا على الإطلاق ، وبالتالي فإن الناتج هو 33. دائمًا ما تذكر شيئًا واحدًا هنا: يمكن الوصول إلى جميع الطرق الثابتة والمتغيرات الثابتة من خلال الكائنات (طالما أن أذونات الوصول كافية).
3. هل يمكن أن تعمل ثابت على المتغيرات المحلية؟
في C/C ++ ، يمكن للمتغيرات المحلية ، أن تتذكر في Java: لا يُسمح باستخدام ثابت لتعديل المتغيرات المحلية. لا تسأل لماذا ، هذا هو توفير بناء جملة Java.
3. أسئلة مكتوبة مشتركة
يسرد ما يلي بعض الأسئلة حول الكلمات الرئيسية الثابتة التي يتم مواجهتها غالبًا في المقابلة المكتوبة. هم للرجوع فقط. إذا كان لديك أي مكملات ، فلا تتردد في ترك رسالة أدناه.
1. ما هي نتيجة الإخراج للرمز التالي؟
يمتد اختبار الفئة العامة الأساسية {static {system.out.println ("Test Static") ؛} test public () {system.out.println ("Test Constructor") ؛} public static void main (string [] args) {new test () ؛ base () {system.out.println ("Base Constructor") ؛}} قاعدة ثابتة
اختبار ثابت
مُنشئ قاعدة
مُنشئ اختبار
بالنسبة إلى سبب هذه النتيجة ، دعونا لا نناقشها أولاً. دعونا نفكر في عملية التنفيذ المحددة لهذا الرمز. في بداية التنفيذ ، يجب علينا أولاً العثور على الطريقة الرئيسية ، لأن الطريقة الرئيسية هي مدخل البرنامج ، ولكن قبل تنفيذ الطريقة الرئيسية ، يجب تحميل فئة الاختبار أولاً. عند تحميل فئة الاختبار ، وجد أن فئة الاختبار ترث من الفئة الأساسية ، لذلك سوف يتحول لتحميل الفئة الأساسية أولاً. عند تحميل الفئة الأساسية ، يجد أن هناك كتلة ثابتة ، ثم تنفذ الكتلة الثابتة. بعد تحميل الفئة الأساسية ، تستمر فئة الاختبار في التحميل ، ثم تجد أن هناك كتل ثابتة في فئة الاختبار ، لذلك يتم تنفيذ الكتلة الثابتة. بعد تحميل الفئة المطلوبة ، تبدأ الطريقة الرئيسية في تنفيذها. عند تنفيذ اختبار جديد () بالطريقة الرئيسية ، سيتم استدعاء مُنشئ الفئة الأصل أولاً ، ثم مُنشئه. لذلك ، تظهر نتيجة الإخراج أعلاه.
2. ما هي نتيجة الإخراج لهذا الرمز؟
اختبار الفئة العامة {person person = شخص جديد ("اختبار") ؛ ثابت {system.out.println ("اختبار ثابت") ؛} الاختبار العام () {system.out.println ("Test Constructor") ؛} public static void main (string) {new myclass () ؛}} person (string str) {system.out.println ("person"+str) ؛}} class myClass يمتد اختبار {person person = شخص جديد ("myclass") ؛ ثابت {system.out.println ("myclass static") ؛} public myclass () {system.out.println ( اختبار ثابت 1
اختبار ثابت 2
على الرغم من عدم وجود عبارات في الطريقة الرئيسية ، إلا أنها ستظل الإخراج ، لأنه تم شرح السبب أعلاه. بالإضافة إلى ذلك ، يمكن أن تظهر الكتلة الثابتة في أي مكان في الفصل (طالما أنها ليست داخل الطريقة ، تذكر أنه لا يمكن لأي طريقة القيام بذلك) ويتم تنفيذ التنفيذ بترتيب الكتل الثابتة.
ما سبق هو تحليل شامل للكلمات الرئيسية الثابتة في جافا التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!