الوحدة 3: حماية البيانات والتحكم بالوصول · الموضوع 6 من 17
الموضوع 6

محددات عدم الوصول: static و final

كلمات لا تتحكّم في الوصول بل تغيّر طبيعة العضو: مشترك بين الكائنات، أو ثابت لا يتغيّر.

staticnumber_of_books = 2 book1book2 final
بعد هذا الدرس ستستطيع أن:
  • تعرّف المتغير static، وتوضّح كيف تشترك فيه جميع الكائنات.
  • تستدعي دالة static باسم الكلاس دون إنشاء كائن.
  • تطبّق final على المتغير والدالة والكلاس، وتذكر أثرها على كل منها.
  • تعرّف ثابتًا باستخدام static final مثل Math.PI.

١أهم معدّلات عدم الوصول

المعدّلوظيفته
staticعضو مشترك بين جميع كائنات الكلاس، ويُستدعى باسم الكلاس مباشرة.
finalمتغير لا تتغيّر قيمته بعد تحديدها، أو دالة لا يُعاد كتابتها، أو كلاس لا يُورث.
abstractكلاس أو دالة مجردة تكمّلها الكلاسات الوارثة (درس التجريد).

وهناك أخرى للعلم: synchronized و native و transient و volatile.

٢static: نسخة واحدة للجميع

static number_of_books= 2 book1 : Bookid = 1title = …book2 : Bookid = 2title = …
لكل كائن نسخته الخاصة من id و title، أما المتغير static فنسخة واحدة في الذاكرة تشير إليها كل الكائنات.
package non.access.modifiers;public class ClassStatic {    static int counter = 0;     static void showMessage() {        System.out.println("Hello from static method!");    }}
package non.access.modifiers;public class Main {    public static void main(String[] args) {        // يمكن الوصول إليه مباشرة بدون        // object        ClassStatic.counter = 5;        ClassStatic.showMessage();        System.out.println("Counter: " + ClassStatic.counter);    }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
ClassStaticMain
ClassStatic~ counter : int~ showMessage() : voidMain+ main(args : String[]) : void

ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.

Output – non-access Modifiers (run)×
run:
Hello from static method!
Counter: 5
BUILD SUCCESSFUL (total time: 0 seconds)

٣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.

Book~ id : int~ title : String~ number_of_books : int+ price : double+ TAX : double = 0.15+ Book()~ total_books() : int+ calcPrice() : void
🧩 في UML: العضو static يُكتب مسطّرًا. والثابت final static يُكتب عادةً بأحرف كبيرة مثل TAX.
+ public- private# protected~ defaultمسطّر: staticمائل: abstract
التدريب العملي 9: العدّاد الثابت والضريبة الثابتةالجزء الأول: عدّاد static للكتب. الجزء الثاني: إضافة price والثابت TAX ودالة calcPrice.افتح التدريب ←

توقّع وتحقّق

أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.

ما الناتج؟

snippet
static int n = 0;A() { n++; }// new A(); new A(); new A();// System.out.println(A.n);
المتغير مشترك؛ كل new تزيده واحدًا.

كيف نستدعي دالة static اسمها total في الكلاس Book؟

كلاس معرّف بـ final:

في مخطط UML، العضو static يُكتب:

الخلاصة

انتقل إلى تقييم الدرسأسئلة التقييم، وأكمل الفراغات.ابدأ التقييم ←