ترتيب تهيئة متغير ثابت
1. قواعد بسيطة
أولاً ، دعونا نلقي نظرة على رمز Java الأكثر شيوعًا:
اختبار الفئة العامة {public static test1 t = new test1 () ؛ ثابت عام int a = 0 ؛ static int b ؛ public static void main (string [] arg) {system.out.println (test.a) ؛ system.out.println (test.b) ؛ }} class test1 {public test1 () {test.a ++ ؛ test.b ++ ؛ }}هنا تخمين ما هي نتيجة الإخراج لوحدة التحكم؟
حسنًا ، ربما خمنت النتيجة أدناه ، لذلك لا تزال على دراية بـ Java.
انسخ الرمز على النحو التالي: 0 1
إذا كنت لا تفهم سبب إخراج النتيجة أعلاه ، فسوف أخبرك بذلك.
يتبع التهيئة المتغيرة الثابتة Java القواعد التالية:
بعد قراءة هذا ، سوف تفهم أن قيمة الاختبار. لقد تغيرت ثلاث مرات.
تم تعيينه على 0 عند الإعلان >> تم تعيين Test1 :: Test1 على 1 >> test.a تهيئة إلى 0
2. القواعد المعقدة
إذا فهمت هذا ، يرجى إلقاء نظرة على الرمز أدناه.
الفئة العامة A {public static int b = ba ؛ ثابت عام زائد = جديد ("أ") ؛ Public Static Final FinalInt = (int) (Math.Random ()*100) ؛ static static b p = new b ("a") ؛ Static Final Final Finalstr = "FinalStr" ؛ integer integer integer النهائي العام = عدد صحيح جديد (10) ؛ int static int A = 1 ؛ static static b c = null ؛ Public A (سلسلة من) {system.out.println ("----------- ابدأ A :: A ----------------") ؛ system.out.println ("a :: a ، from ="+from) ؛ system.out.println ("a :: a ، ab ="+ab) ؛ System.out.println ("A :: A ، A.FinalInt ="+A.FinalInt) ؛ system.out.println ("a :: a ، ba ="+ba) ؛ System.out.println ("A :: A ، B.Plus ="+B.Plus) ؛ System.out.println ("----------- نهاية A :: A ----------------") ؛ } public static void main (string [] arg) {system.out.println ("main ، ab ="+ab) ؛ System.out.println ("Main ، bt ="+bt) ؛ System.out.println ("Main ، Ca ="+Ca) ؛ }} class b {public static int t = aa ؛ ثابت عام A plus = جديد ("ب") ؛ int static int A = 1 ؛ public b (string from) {system.out.println ("----------- ابدأ b :: b ---------------------") ؛ system.out.println ("b :: b ، from ="+from) ؛ system.out.println ("b :: b ، ba ="+ba) ؛ system.out.println ("b :: b ، aa ="+aa) ؛ System.out.println ("B :: B ، AP ="+AP) ؛ System.out.println ("B :: B ، A.Plus ="+A.Plus) ؛ System.out.println ("B :: B ، A.FinalInt ="+A.FinalInt) ؛ System.out.println ("B :: B ، A.FinalInt ="+A.FinalInt) ؛ System.out.println ("B :: B ، A.FinalInt ="+A.FinalInt) ؛ System.out.println ("B :: B ، A.FinalInt ="+A.FinalInt) ؛ System.out.println ("B :: B ، A.FinalInteger ="+A.FinalInteger) ؛ System.out.println ("B :: B ، A.FinalStr ="+A.FinalStr) ؛ System.out.println ("----------- End B :: B ----------------") ؛ }} class c {public static final a a = new a ("c") ؛}هل لا يزال بإمكانك تخمين نتيجة الإخراج؟ كتبت أثناء الاختبار ، لذلك لم أخمن ذلك. هاها
نتيجة إخراج وحدة التحكم هي:
----------- ابدأ A :: A ---------------------- A :: A ، من = BA :: A ، AB = 0A :: A ، A.FinalInt = 0a :: A ، Ba = 0a :: A ، B.Plus = null ----------- نهاية A :: A ------------------------- ابدأ A: a.finalint = 0a :: a ، ba = 1a :: a ، b.plus=a@a90653---------- end a :: a ----------------------- ابدأ ب: A.FinalInt = 61b :: B ، A.FinalInteger = nullb :: B ، A.FinalStr = FinalStr ----------- End B :: B -------------- MAIN ، AB = 1MAIN ، B.Plus=A@A90653-------- نهاية A :: A -------------------- Main ، CA = A@61DE33
أنت لم تخمن هذه النتيجة ، هاها.
يستغرق الأمر الكثير من الوقت لشرح نتائج تنفيذ البرنامج واحدًا تلو الآخر. سنكتب مباشرة القواعد التي تليها التهيئة المتغيرة الثابتة Java.
لا تزال القواعد في الفقرة الأولى صالحة ، لكنها ليست سليمة.
تهيئة البيانات الثابتة
إضافة الحقول المؤهلة الثابتة هي حقل الفئة المزعومة ، مما يعني أن مالك هذا الحقل ليس كائنًا بل فئة. بغض النظر عن عدد الكائنات التي يتم إنشاؤها ، لا يوجد سوى نسخة واحدة من البيانات الثابتة.
تتم تهيئة الحقل الثابت دائمًا في الفصل ثم تتم تهيئة الحقل العام. ثم تهيئة المنشئ. ومع ذلك ، إذا لم يتم إنشاء كائن من هذه الفئة ، فلن يتم تهيئة الكائن وسيتم تنفيذها مرة واحدة فقط.
كما هو الحال في الكود التالي ، في فئة staticinitialization ، جدول الجدول الثابت = جدول جديد () ؛ أولاً ، وبعد ذلك لن يتم تهيئة كائن الجدول ، وإلا فلن يتم تهيئته.
Class Bowl {Bowl (int marker) {print ("Bowl (" + marker + ")") ؛ } void f1 (int marker) {print ("f1 (" + marker + ")") ؛ }} جدول الفئة {Static Bowl1 = New Bowl (1) ؛ table () {print ("table ()") ؛ Bowl2.f1 (1) ؛ } void f2 (int marker) {print ("f2 (" + marker + ")") ؛ } وعاء صحن ثابت = وعاء جديد (2) ؛} خزانة الفئة {Bowl Bowl3 = New Bowl (3) ؛ وعاء صحن ثابت = وعاء جديد (4) ؛ خزانة () {print ("cupboard ()") ؛ Bowl4.f1 (2) ؛ } void f3 (int marker) {print ("f3 (" + marker + ")") ؛ } صحن ثابت وعاء = وعاء جديد (5) ؛} الفئة العامة staticinitialization {public static void main (string [] args) {print ("إنشاء خزانة جديدة () في الرئيسية") ؛ خزانة جديدة () ؛ طباعة ("إنشاء خزانة جديدة () في MAIN") ؛ خزانة جديدة () ؛ table.f2 (1) ؛ خزانة. F3 (1) ؛ } جدول الجدول الثابت = جدول جديد () ؛ خزانة خزانة ثابتة = خزانة جديدة () ؛}الإخراج:
وعاء (1) وعاء (2) الجدول () F1 (1) وعاء (4) وعاء (5) وعاء (3) خزانة () F1 (2) إنشاء خزانة جديدة () في Mainbowl (3) Cupboard () F1 (2) إنشاء خزانة جديدة () في MainBowl (3) F1 (2) F2 (1) F3 (1)
التهيئة الساكنة المعروضة (أي الكتل الثابتة)
يسمى وضع عبارات تهيئة متعددة في دعامة ثابتة كتلة ثابتة. في الواقع ، يتم كتابتها معًا عن طريق كتابة إحصائيات متعددة ، والجوهر هو نفسه. لا ينفذ إلا عند إنشاء الكائن لأول مرة أو يتم الوصول إلى حقل الفصل لأول مرة ، ومرة واحدة فقط.
كأس الفئة {cup (int marker) {print ("cup (" + marker + ")") ؛ } void f (int marker) {print ("f (" + marker + ")") ؛ }} Class Cups {Static Cup1 ؛ كوب كأس ثابت ؛ ثابت {cup1 = كوب جديد (1) ؛ CUP2 = كوب جديد (2) ؛ } cups () {print ("cups ()") ؛ }} الفئة العامة ExplicitStatic {public static void main (string [] args) {print ("inside main ()") ؛ cups.cup1.f (99) ؛ // (1)} // Cups Cups1 = Cups () ؛ // (2) // Cups Cups2 = Cups () ؛ // (2)}الإخراج:
داخل Main () Cup (1) Cup (2) F (99)
تهيئة مثيل غير متطابق
لا يوجد شيء يمكن قوله حول هذا الأمر ، إنه مجرد تهيئة عادية ، يتم تنفيذها بالترتيب ، ويمكن تنفيذها عدة مرات.
الفئة القدح {mug (int marker) {print ("mug (" + marker + ")") ؛ } void f (int marker) {print ("f (" + marker + ")") ؛ }} أكواب الفئة العامة {mug mug1 ؛ القدح 2 ؛ {mug1 = New Mug (1) ؛ القدح 2 = القدح الجديد (2) ؛ طباعة ("Mug1 & mug2 تهيئة") ؛ } Mugs () {print ("mugs ()") ؛ } Mugs (int i) {print ("mugs (int)") ؛ } public static void main (string [] args) {print ("inside main ()") ؛ أكواب جديدة () ؛ طباعة ("أكواب جديدة () مكتملة") ؛ أكواب جديدة (1) ؛ طباعة ("أكواب جديدة (1) مكتملة") ؛ }}داخل Main () القدح (1) القدح (2) Mug1 و Mug2 الأبعاد () أكواب جديدة () مكتملة (1) القدح (2) MUG1 و MUG2 MUGUGS (INT) أكواب جديدة (1) مكتملة