في الآونة الأخيرة ، استخدمت التفكير في Java الذي شاهدته عندما كنت خارج العمل. شعرت أنه كان مختلفًا تمامًا عن المرة الأولى التي شاهدتها فيها. دعنا نتحدث عن العلاقة بين الأشياء والمراجع في Java ، وكذلك مفهوم الفصول الداخلية.
1. كل شيء في جافا هو كائن
ما هو كائن المشغل في جافا؟ الجواب هو اقتباس ، وهو مثل مؤشر في C أو C ++.
إذا كان لديك مرجع ، فيجب أن تربطه بكائن في هذا الوقت ، وإلا فلن يتم ترك المرجع إلى سيطرتك كما تعتقد. على سبيل المثال ، يمكنك إنشاء مرجع سلسلة:
سلسلة S ؛
لا يرتبط بأي كائن في هذا الوقت. إذا قمت ببعض العمليات في هذا الوقت ، مثل استدعاء بعض أساليب السلسلة ، فستكون هناك بالتأكيد مشاكل (باستثناء بعض الأنواع الأساسية ، لأنه عندما تحددها ، سيتم تعيينها بالقيمة الأولية) ، لذلك يجب عليك ربط الأموال بالكائن عند استخدامه:
سلسلة s = سلسلة جديدة () ؛
أو
سلسلة s = "اسمي jun" ؛
فقط افعل ذلك هكذا.
2. كيفية الارتباط بالأشياء
في Java ، عادة ما يتم إنشاء كائن من خلال جديد للربط بالمراجع ، مثل:
سلسلة S = سلسلة جديدة ("اسمي Ajun") ؛ هذا لا ينشئ كائنًا لربط المرجع S فحسب ، بل يقوم أيضًا بتهيئته للزملاء ، ولكن أيضًا ينشئ نوع الكائن الخاص بنا.
3. موقع التخزين
(1) المكدس: بشكل عام ، تخزن المكدس المراجع ومتغيرات النوع الأساسي. يخصص المكدس بشكل أساسي الذاكرة وإطلاقها عن طريق تحريك مؤشر المكدس لأعلى ولأسفل.
متغيرات النوع الأساسية ليست مناسبة للإبداع الجديد لأنها تشغل ذاكرة أقل.
(2) كومة: تستخدم لتخزين كائنات جافا. عندما ينفذ البرنامج جديد ، ستخصص الكومة مساحة لهذا الكائن. تذكر أن الكومة تستخدم المزيد من الوقت لتخصيص الذاكرة وإطلاقها من المكدس لتخزين الذاكرة وإطلاقها. هذا هو السبب في حاجة متغيرات النوع الأساسي إلى تخزينها على المكدس ، لأنه يتم استخدام متغيرات النوع الأساسي بشكل متكرر ، في كثير من الأحيان ، تخزين الذاكرة وإطلاقها ، وعند استهلاك المزيد ، يمكن تخيل الأداء.
4. الطبقة الداخلية
(1) المعرفة الأساسية للفئات الداخلية:
بشكل عام ، يمكن تقسيم الفصول الدراسية المحددة داخل فئات Java إلى: فصول محددة خارج الجسم ، والفئات المحددة داخل الطريقة ، والفئات الداخلية الثابتة (المحددة فقط خارج الطريقة) ، والفئات الداخلية المجهولة الوصف:
حدد الفصل خارج الطريقة:
يمكن الوصول إلى متغيرات الأعضاء في الفصل (ثابت ، غير منتظم). من أجل التأكد من أنه يمكن الرجوع إلى متغيرات الأعضاء في الفصل بشكل صحيح ، يجب أولاً إنشاء كائن الفئة الخارجية قبل إنشاء أذونات الوصول إلى الكائن للفئة الداخلية. يمكنك معاملته كمتغير عضو في الفصل ، لذلك ستفهمه أكثر من ذلك بكثير.
الفصول المحددة في جسم الطريقة ؛
يمكن الوصول إلى متغيرات الأعضاء في الفصل (ثابت ، غير منتظم). من أجل التأكد من أنه يمكن الرجوع إلى متغيرات الأعضاء في الفصل بشكل صحيح ، يجب أولاً إنشاء كائن الفئة الخارجية قبل إنشاء كائن الفئة الداخلية لا يمكن أن يكون له حقوق الوصول ، وأن تعامله فقط كمتغير محلي للطريقة.
الطبقة الداخلية الثابتة:
الوصول إلى أي فئة داخلية مجهولة فقط عن طريق الوصول إلى متغيرات الأعضاء الثابتة في الفصل:
يمكن الوصول إلى متغيرات الأعضاء في الفصل (ثابت ، غير منتظم). من أجل التأكد من أنه يمكن الرجوع إلى متغيرات الأعضاء في الفصل بشكل صحيح ، من الضروري إنشاء كائن الفئة الخارجية قبل تثبيت كائن الفئة الداخلية (2). يمكن لدور الطبقة الداخلية إخفاء الفصل جيدًا. بشكل عام ، لا يسمح الفصل بالوصول الافتراضي للحماية الخاصة.
يمكن للفصول الداخلية تنفيذ ميراث متعددة ، تعوض عن الخصائص التي لا يمكن لـ Java أن ترثها أكثر (3) ، أمثلة
حزمة com.ajun.test.innerclass.example ؛ / ** * محتوى الفاكهة * Author Administrator * */ Interface Contents {String value () ؛ } package com.ajun.test.innerclass.example ؛ / ** * وجهة فاكهة * Author Administrator * */ واجهة عامة الوجهة {// الوجهة سلسلة readlabel () ؛ } package com.ajun.test.innerclass.example ؛ السلع الفئة العامة {private string des = "is ruit !!" ؛ // طريقة محتوى الفئة الخاصة الخارجي يبرز المحتويات {private string name = "Apple"+des ؛ Override public string value () {return name ؛ }} // يبرز الفئة الخارجية الخارجية GDESTINALE Destination {private string label ؛ gdestination الخاص (تسمية السلسلة) {this.label = label ؛ } Override public readlabel () {return label ؛ }} // مجهول الفئة الداخلية الوجهة العامة getDestination (تسمية السلسلة النهائية) {return New Destination () {Override public readlabel () {return label ؛ }} ؛ } Destination Dester (String s) {return new gdestination (s) ؛ } المحتويات العامة content () {return new content () ؛ } الوجهة العامة DEST2 (سلسلة S) gdestination الخاص (تسمية السلسلة) {this.label = label ؛ } Override public readlabel () {return label ؛ }} إرجاع gdestination (s) جديد ؛ }} package com.ajun.test.innerclass.example ؛ اختبار الفئة العامة {public static void main (string [] a) {guss gs = new Goods () ؛ المحتويات c = gs.content () ؛ الوجهة d = gs.dest ("beijing") ؛ system.out.println (c.value ()) ؛ system.out.println (d.readlabel ()) ؛ الوجهة D1 = gs.getDestination ("Shanghai") ؛ System.out.println (d1.readlabel ()) ؛ system.out.println (gs.dest2 ("tianjin"). readlabel ()) ؛ }}المحتوى و gdestination مخفي جيدا. عند الاتصال بالخارج ، لا تعرف الفئة التي يتم استدعاؤها ، بحيث تحتوي هذه الفئة على ميزات ميراث متعددة.
الإخراج
أبل رويت !! بكين شنغهاي تيانجين