الموضوع 6
محددات عدم الوصول: static و final
كلمات لا تتحكّم في الوصول بل تغيّر طبيعة العضو: مشترك بين الكائنات، أو ثابت لا يتغيّر.
بعد هذا الدرس ستستطيع أن:
- تعرّف المتغير static، وتوضّح كيف تشترك فيه جميع الكائنات.
- تستدعي دالة static باسم الكلاس دون إنشاء كائن.
- تطبّق final على المتغير والدالة والكلاس، وتذكر أثرها على كل منها.
- تعرّف ثابتًا باستخدام static final مثل Math.PI.
١أهم معدّلات عدم الوصول
| المعدّل | وظيفته |
|---|---|
static | عضو مشترك بين جميع كائنات الكلاس، ويُستدعى باسم الكلاس مباشرة. |
final | متغير لا تتغيّر قيمته بعد تحديدها، أو دالة لا يُعاد كتابتها، أو كلاس لا يُورث. |
abstract | كلاس أو دالة مجردة تكمّلها الكلاسات الوارثة (درس التجريد). |
وهناك أخرى للعلم: synchronized و native و transient و volatile.
٢static: نسخة واحدة للجميع
package non.access.modifiers;public class ClassStatic { static int counter = 0; static void showMessage() { System.out.println("Hello from static method!"); }}
ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.
run:
Hello from static method!
Counter: 5
BUILD SUCCESSFUL (total time: 0 seconds)
- المتغير static يُسمّى أيضًا Class Variable، ونصل إليه بـ
Book.number_of_books. - الدالة static تُستدعى دون كائن:
Book.total_books()، ومثلهاMath.sqrt(). - الدالة static لا تصل إلا إلى أعضاء static في الكلاس، أو إلى معاملاتها ومتغيراتها المحلية.
٣final: قيمة لا تتغيّر
| على | الأثر | مثال |
|---|---|---|
| متغير | يُحدَّد مرة واحدة فقط، عند التعريف أو في دالة البناء | final double TAX = 0.15; |
| دالة | لا يمكن إعادة كتابتها override في الكلاس الوارث | public final void f() |
| كلاس | لا يمكن الوراثة منه | final class Math |
جرّبها في التدريب 9 أدناه: أزل // من السطر Book.TAX = 0.05; فيرفضه المترجِم برسالة cannot assign a value to final variable TAX.
+ public- private# protected~ defaultمسطّر: staticمائل: abstract
توقّع وتحقّق
أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.
ما الناتج؟
static int n = 0;A() { n++; }// new A(); new A(); new A();// System.out.println(A.n);
المتغير مشترك؛ كل new تزيده واحدًا.
كيف نستدعي دالة static اسمها total في الكلاس Book؟
كلاس معرّف بـ final:
في مخطط UML، العضو static يُكتب:
الخلاصة
- static: نسخة واحدة مشتركة، تُستدعى باسم الكلاس.
- الدالة static لا تحتاج كائنًا، ولا تصل إلا لأعضاء static.
- final: متغير ثابت، أو دالة لا تُعاد كتابتها، أو كلاس لا يُورث.
- final static = ثابت عام مثل Math.PI.