2 العنصر الثاني : سلسلة تعلم الجافا من الصفر "أساسيات الجافا"

في الدرس  السابق تعرفنا على بيئة الجافا وكيف تعمل وكيف تقوم بترجمة الشفرة الى لغة الالة بتقنية bytecode  ثم قمنا  بتحميل  الجافا على حاسوبنا  لكننا  اغفلنا طريقة تعريف الجافاعلى الحاسوب .

1 تعيين المسار  العام في الجافا وتعريفها على الجهاز 


الجافا path  و الجافا calsspath  هما متغيران بيئيان للجهاز حتى تتمكن من تعريف الجافا وعمل على الجافا بشكل مريح  وبدون اي مشاكل في ما يخص  المكونات البسيطة التي تعتمد على الجافا في الجهاز 

   -ما هي متغيرات البيئة ؟ 

تستخدم العديد من أنظمة التشغيل متغيرات البيئة لتمرير معلومات التهيئة إلى التطبيقات. متغيرات بيئة Java هي أزواج مفتاح / قيمة ، حيث يكون كل من المفتاح والقيمة عبارة عن سلاسل. هناك العديد من الاختلافات الدقيقة بين الطريقة التي يتم بها تنفيذ متغيرات البيئة على أنظمة التشغيل المختلفة. على سبيل المثال ، لا تكون متغيرات في Windows حساسة لحالة الأحرف ، بينما لا تستخدمها UNIX. تختلف طريقة استخدام متغيرات البيئة أيضًا. عادةً ما يتم تسمية متغيرات البيئة في أحرف كبيرة ، مع الكلمات المرتبطة بتسطير أسفل السطر مثل: JAVA_HOME.

   -مثال عن البيئة في الويندوز 



JAVA_HOME : C:\Program Files\Java\jdk1.8.0
JDK_HOME  : %JAVA_HOME%
JRE_HOME  : %JAVA_HOME%\jre
CLASSPATH : .;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib
PATH      : your-unique-entries;%JAVA_HOME%\bin


تحدث العديد من المشكلات في تثبيت وتشغيل تطبيقات Java بسبب الإعداد غير الصحيح لمتغيرات البيئة خاصة في confoguring PATH و CLASSPATH و JAVA_HOME.


     -كيف نثبت الجافا على الويندوز ؟


الJava PATH هو متغير البيئة حيث نحدد مواقع الثنائيات. عند تشغيل برنامج من سطر الأوامر ، يستخدم نظام التشغيل متغير بيئة PATH للبحث عن البرنامج في نظام الملفات المحلي لديك. في Java ، لتشغيل أي برنامج نستخدم "java.exe" ولترجمة java code استخدم javac.exe. تتوفر جميع الملفات القابلة للتنفيذ (.exe) في مجلد bin لذا قمنا بتعيين المسار إلى مجلد bin. سوف يبحث نظام التشغيل في PATH هذا للتنفيذ. يمكنك تعيين متغير بيئة المسار مؤقت (سطر الأوامر) والدائم.

تعيين المسار من سطر أوامر Windows CMD
افتح موجه الأوامر واكتب ما يلي في موجه الأوامر.


set path=jdk_path


مثال:  



ولوضع المسار بشكل يدوي  اتبع الطريقة التالية  :  

  • اضغط على الحاسوب واختر MyCoputer او حاسوبي 

  • بعدها  اختر Advanced System Setting



  • قم بتغيير المسار الذي تريده او اضف مسار جديد  


ثم تحصل على نافذة صغيرة "New System Variable" وهناك يمكنك تعيين "اسم متغير" و "قيمة متغير". قم بتعيين اسم المتغير على أنه "مسار" و "قيمة متغير" ك "مسار jdk" الخاص بك.

  • ثم  اضغط على ok ومبروك عليك  تعريف الجافا في الجهاز  


          -كيف تضع مسار الكلاس classpath ؟


الJava CLASSPATH هو المسار لتطبيق Java حيث ستصبح الفئات التي قمت بتجميعها متاحة. هو معلمة في Java Virtual Machine أو برنامج التحويل البرمجي Java الذي يحدد موقع الفئات والحزم المعرفة من قبل المستخدم. قد يتم تعيين المعلمة إما على سطر الأوامر أو من خلال متغير بيئة. إذا لم يتم تعيين CLASSPATH ، فسيتم تعيينه إلى الدليل الحالي. إذا قمت بتعيين CLASSPATH ، فمن المهم أن تقوم بتضمين دليل العمل الحالي (.). خلاف ذلك ، لن يتم البحث في الدليل الحالي.


set classpath=.;C:\Program Files\Java\jdk1.8.0\lib\*


في نظام Windows لتعيين ClassPath:

كرر الخطوات السابقة: الخطوات من 1 إلى الخطوة 4.

ثم تحصل على نافذة صغيرة "New System Variable" وهناك يمكنك تعيين "اسم متغير" و "قيمة متغير". قم بتعيين اسم المتغير كـ "ClassPath" و "قيمة متغير" كـ "مسار الفئة" على سبيل المثال:

 C: \ Program Files \ Java \ jdk1.8.0 \ lib \ *



           -استخدام أحرف الاستبدال في java classpath



تم تقديم بطاقات البرية من Java 6. يمكن أن تحتوي إدخالات مسار الفئة على حرف بدل basename * ، والذي يعتبر مساوياً لتحديد قائمة بكافة الملفات في الدليل بالامتداد .jar أو .JAR. على سبيل المثال إدخال classpath يتكون من * يوسع إلى قائمة بكل ملفات jar في الدليل الحالي.

مثال: 

java -cp "lib/*" %MAINCLASS%


حيث٪ MAINCLASS٪ هي الفئة التي تحتوي على الطريقة الرئيسية الخاصة بك.

                 -كيفية استخدام حرف بدل في classpath لإضافة عدةjars

java -cp "lib/*" -jar %MAINJAR%



حيث٪ MAINJAR٪ هو ملف jar المراد تشغيله عبر بيانه الداخلي.

إذا كنت بحاجة إلى jar محددة فقط ، فستحتاج إلى إضافتها بشكل فردي. لا تقبل سلسلة classpath أحرف البدل العامة مثل Jar * و * .jar و hiber * وما إلى ذلك.

مثال :
هذا المثال لن يعمل  

java -cp "Halo.jar;lib/*.jar" ni.package.MainClass


المدخل الصحيح كالتالي: 

java -cp "Halo.jar;lib/*" ni.package.MainClass


2 المدخلات في  لغة الجافا


توجد فئتان أساسيتان للبينات المدخلة في  الجافا، الكائنية Objectو المبدئية Primatives .يستوجب  في  الاساس وجود بينات مبدئية  للمتغيرات، يستخدم نوع البينات البدائي كمية صغيرة  من البينات يتم حجزها  في الذاكرة المؤقتة بينما يكون الكائن عبارة عن جزء كبير من الذاكرة يمكن أن يحتوي على قدر كبير من البيانات بالإضافة إلى طرق لمعالجة تلك البيانات.


   - انواع البينات المبدئية  Primatives


لا يوجد سوى ثمانية أنواع من البيانات البدائية في Java:  byte, short, int, long, float, double, char, and boolean.لا يمكن لبرنامج Java تعريف أي أنواع بيانات بدائية أخرى. يتم استخدام الأوليات في كثير من الأحيان ، مما يجعلها أشياء من شأنها أن تقلل الأداء إلى حد كبير. تتبع أنواع البيانات الأولية:



boolean - Non-numeric value of true or false.
byte - An 8-bit (1-byte) integer value
char - A 16-bit character using the Unicode encoding scheme
short - A 16-bit (2-byte) integer value
int - A 32-bit (4-byte) integer value
long - A 64-bit (8-byte) integer value
float - A 32-bit (4-byte) floating-point value
double - A 64-bit (8-byte) floating-point value



     - المنطقية Boolean


يحتوي نوع البيانات الأولية المنطقية على قيمتين محتملتين ، إما صواب أم خطأ. هذه هي أيضا الكلمات الصغيرة على حد سواء. يتم استخدام منطقي لتنفيذ العمليات المنطقية ، الأكثر شيوعًا لتحديد ما إذا كان بعض الشروط صحيحًة.


public class Program {
  public static void main(String[] args) {
    // Test true and false booleans.
    boolean success = true;
    if (success) {
    System.out.println("Success !!");
    }
    else {
    System.out.println("Not Success !!");
    }
    success = false;
    if (!success) {
    System.out.println("Not Success !!");
    }
  }
}



المخرج على الشكل  التالي:


Success !!
Not Success !!


تقوم Java بتقييم تعبير منطقي من خلال تقييم التعبير الموجود على اليسار أولاً ، ثم تقييم التعبير على اليمين ، ثم تطبيق معامل الارتباط الخاص به لتحديد ما إذا كان التعبير بأكمله يتم تقييمه إلى true أو false.


   -البايت Byte


أصغر أنواع البيانات المتكاملة هي البايت. لديها حد أدنى من -128 وقيمة الحد الأقصى من 127. القيمة الافتراضية لنوع بيانات البايت هي صفر -0.


byte bite =20;

   -الكاراكتر char 


يعتمد نوع البيانات char على أحرف Unicode ذات ستة عشر بت. يمكّنك Unicode من تحديد كافة الأحرف الخاصة بمعظم مجموعات الأحرف للغات العالم. تمثل "u" أمام الرموز السداسية أن الحرف هو unicode. لديه أدنى قيمة \ u000000 (أو 0) وقيمة قصوى '\ uffff'. على عكس C ، لا يدعم Java الأحرف الموقعة. ورأى مصممي جافا أن الأحرف الموقعة والأرقام غير الموقعة كانت مصادر لأخطاء البرنامج.


char cr ='a';

بالإضافة إلى ذلك ، تدعم Java عددًا من أحرف escape الأخرى التي تسهّل تمثيل أحرف ASCII غير المطبوعة الشائعة الاستخدام مثل newline escape من أحرف ترقيم معينة لها معنى خاص في Java. فمثلا:

char backspace = '\ b'؛

char tab = '\ t' ؛



  -القصير chort


chort هو ستة عشر بت. لديها قيمة الحد الأدنى من -32.768 وقيمة قصوى من 32767. نظرًا لأنه يتم توقيع مختصر ، ولا يتم توقيع char ، يكون char أكبر نسبيًا من مسافة قصيرة ، لذا لا يمكنك تعيين char لفترة قصيرة. القيمة الافتراضية للقصير هي صفر -0.

short i = 12000؛


    -الانتجر int



الانتجر هو أربعة أرقام - اثنان وثلاثون بت ويمثل إجمالي 4،294،967،296 رقم. تعمل Java على جعل النظام محايدًا من خلال إنشاء 32 بت في كل JVM دائمًا ، وباختصار 16 بتة دائمًا وطول دائم 64 بت وهكذا. هذا يحفظ جافا من المشاكل التي يواجهها المبرمجون 'C' عند نقل الكود بين المنصات. على سبيل المثال ، يمكن أن يكون int في برنامج "C" وحدتي بايت على نظام تشغيل واحد وأربعة بايت على نظام تشغيل آخر. مثل جميع أنواع البيانات الرقمية يمكن أن يلقي الباحث في أنواع رقمية أخرى (byte, short, long, float, double). عندما يتم القيام بعمليات الضياع (على سبيل المثال ، int إلى بايت) ، يتم إجراء التحويل بطول النوع الأصغر.



int  i =25000;

   -long 



مدة طويلة هي ستة وستين بت - ثمانية بايت. مجموعة طويلة كبيرة جدا. هذا يجعلها مفيدة عندما تكون هناك حاجة إلى أعداد كاملة. استخدم نوع البيانات هذا عندما تحتاج إلى مجموعة من القيم أكبر من تلك التي يوفرها int.


long x=109876677777l;



    -الفلوت




يتم استخدام نوع البيانات هذا لتمثيل الأرقام مع الكسور العشرية. في جافا ، يتكون float من نقطة عائمة IEEE 754 32 بت. مثل جميع أنواع float الرقمية يمكن أن تطرح في أنواع رقمية أخرى (byte, short, long, int, double). عندما يتم إجراء ضياع إلى أنواع الأعداد الصحيحة (على سبيل المثال float على اختصار) يتم اقتطاع جزء الكسري ويتم إجراء التحويل بطول أصغر من النوع.



float x = 3.144;

    -المزدوجdouble 



Double نوع بيانات ضعف حجم float. وهي مكونة من نقطة عائمة IEEE 754 64 بت. يمكنك أيضًا استخدام الترميز الأسي مع العوامات والمضاعفات. يتوافق المزدوجة مع مواصفات IEEE 754 لنوع البيانات هذا. نظرًا لأن معظم الأنظمة لا يمكنها القيام إلا بمحاكاة 64 بت ، فلا تستخدم نظامًا مزدوجًا عندما تفعل float. بشكل عام ،  القيمة الافتراضية هي 0.0.



double a = 3.245249;


ملاحظة: يتم توقيع جميع الأعداد الأولية ، والطريقة الوحيدة لنقل قيمة من بدائية كبيرة إلى بدائية أصغر هي استخدام Casting. في الدرس القادم يمكنك الدراسة في Deatil حول TypeCasting.



3 التصبيب بين  انواع مدخلات الجافا المبدئية  


يعرف تغيير مدخل لمتغير  الى  مدخل  اخر  بالتحويل للمدخلات   data type conversion

وهناك  نوعان  من التصبيب : 

  • النوع البدائي  للتصبيب Primitive Type Casting 
  • النوع المرجعي للتصبيب Reference Type Casting


         - النوع البدائي  للتصبيب 


يتيح لك الاختيار بين الأنواع البدائية تحويل قيمة نوع ما إلى نوع بدائي آخر يسمى النوع الأولي من التصبيب. يحدث هذا بشكل شائع مع أنواع البيانات الرقمية. ولكن لا يمكن أبدا استخدام النوع البدائي المنطقي في التصبيب. يجب أن تكون قيمه إما صحيحة أو خاطئة ولا يمكن استخدامها في عملية التصبيب.

هناك نوعان أساسيان من توسعة ونوع الصب البدائي.


*توسيع التحويلات (الصب الضمني)Implicit casting



يمكن تحويل قيمة نوع البيانات الأضيق (الأقل حجمًا) إلى قيمة نوع بيانات أوسع (حجم أكبر) دون فقدان المعلومات ويسمى تحويل توسيع. يُعرف هذا التحويل أيضًا بالصب الضمني.


int i = 1000;
double j = i;


في المثال أعلاه ، يتم إجراء "الكتابة التلقائية" ، وهو متغير صحيح (4 بايت) يتم تحويله إلى متغير مزدوج (8 بايت). حدث الإرسال من نوع بيانات أقل إلى نوع بيانات أعلى ، لذلك لا يوجد فقدان للبيانات.

*توسيع التحويلات في جافا



From a byte to a short, an int, a long, a float, or a double
From a short to an int, a long, a float, or a double
From a char to an int, a long, a float, or a double
From an int to a long, a float, or a double
From a long to a float or a double
From a float to a double

ملاحظة: قد ينتج عن تحويل  لقيمة int أو قيمة long إلى قيمة float ، أو قيمة long إلى قيمة double ، فقد result. بمعنى ، قد تفقد النتيجة بعض البتات الأقل أهمية من القيمة. في هذه الحالة ، ستكون قيمة النقطة float الناتجة عبارة عن إصدار مستدير بشكل صحيح لقيمة العدد الصحيح ، باستخدام وضع IEEE 754 round-to-Near.


*تضييق التحويلات (Explicit Casting)


يسمى التحويل من نوع بيانات أوسع (حجم أكبر) إلى نوع بيانات أضيق (حجم أقل) تحويل تضييق. يمكن أن يؤدي هذا النوع من التحويل إلى فقد المعلومات. لم يتم ذلك بشكل ضمني من قبل JVM ويتطلب explicit casting.

double i = 100.7;
int j = (int) i;

في المثال أعلاه ، تم تحويل متغير مزدوج (8 بايت) إلى متغير صحيح (4 بايت). لقد حدث الإرسال من نوع بيانات أعلى إلى نوع بيانات أقل ، لذا يمكن أن يؤدي إلى فقدان المعلومات.


*تضييق التحويلات في جافا


 
From a byte to a char
From a short to a byte or a char
From a char to a byte or a short
From an int to a byte, a short, or a char
From a long to a byte, a short, a char, or an int
From a float to a byte, a short, a char, an int, or a long
From a double to a byte, a short, a char, an int, a long, or a float

يتم إجراء تحويل ضمني تلقائيًا ، بدون أي إدخال إضافي من المطور. من ناحية أخرى ، لا يتم إجراء تحويل صريح تلقائيًا ، ويمليه المطور بدلاً من ذلك.

    -نوع المرجعي  في  التصبيب  



يمكن أيضًا إدخال كائنات الفئات إلى كائنات من فئات أخرى عندما ترتبط فئات المصدر والوجهة بالوراثة ، وتكون فئة واحدة فئة فرعية للآخر. يمكن أن يكون التصبيب إلى نوع الفصل الخاص به أو إلى أحد أنواع الطبقة الفرعية أو الطبقة الفائقة أو الواجهات. هناك قواعد وقت التجميع وقواعد وقت التشغيل للإرسال في جافا. هناك نوعان من أنواع المراجع المرجعية في جافا ، وهما:


  • اعلى التصبيب Up casting
  • اسفل التصبيب Downcasting

يتم الإرسال إلى التصبيب إلى نوع عمودي ، في حين يتم وضع علامة downcasting إلى نوع فرعي. يُسمح Supercasting على الدوام ، ولكن يتضمن البث نوعًا من الاختيار ويمكنه طرح ClassCastException. استثناء  للفئات  


*أعلى التصبيب


تصبيب كائن من نوع فرعي إلى نوع super وهذا يسمى upcast. في Java ، لا نحتاج إلى إضافة قالب explicit ويمكنك تعيين الكائن مباشرةً. سوف يفهم المحول البرمجي ويلقي القيمة إلى النوع supertype. من خلال القيام بذلك ، نقوم برفع كائن إلى مستوى عام. إذا كنا نفضل ، فيمكننا إضافة explicit ولا توجد مشكلات.



*أسفل التصبيب  


يُطلق على الصب نوعًا رئيسيًا من النوع الفرعي اسم downcast. هذا هو المدلى بها في الغالب. من خلال القيام بذلك ، فإننا نخبر المترجم بأن القيمة المخزنة في الكائن الأساسي هي من النوع supertype. ثم نطلب وقت التشغيل لتعيين القيمة. نظرًا للهبوط ، يمكننا الوصول إلى أساليب النمط الفرعي على ذلك الكائن. عند تنفيذ عملية downcasting ، فإنك تدرك تمامًا نوع الكائن الذي ستصوره.



4 الUnboxing  و Autoboxing  في  الجافا


الإنبوكس والاوتوبكس هي ميزات تم تضمينها  في نسخة الجافا 1.5  ، حيث يحدث  التحويل التلقائي  من  نوع  المبدئي Primitive الى نوع  corresponding Wrapper في نوع الكلاس وVice-Versa 



    - AutoBoxing

Autoboxing هو عملية تحويل بيانات نوع مبدئية primitive إلى مثيل كائن فئة corresponding wrapper. وهو ينطوي على تخصيص ديناميكي للذاكرة وتهيئة كائن لكل مبدئية. في autoboxing ليست هناك حاجة لبناء كائن .


int j = 1000;
Integer intr = j; // Autoboxing


   -UnBoxing


Unboxing هي عملية تحويل نسخة مجمّعة إلى نوع مبدئي. وهي عبارة عن عملية يتم من خلالها إخفاء قيمة نوع كائن boxed تلقائيًا من المجمّع عندما تكون قيمته مطلوبة. للقيام بذلك ، لا توجد حاجة لاستدعاء أسلوب مثل doubleValue () أو intValue ().


Integer intr = new Integer(100);
int i = intr; // Unboxing




       -متى تطلب ذلك؟


عندما يتوقع أسلوب كائن فئة ملحقة ولكن القيمة التي يتم تمريرها كمعلمة نوع مبدائي. عندما يتم تعيين القيمة البدائية لمتغير فئة المجمع أو العكس.

*مزايا

لا حاجة لجعل الكائن explicitly و القيمة النوع البدائي.

*مساوئ


"Autoboxing" غير متوقع في سلوكه ويمكن أن يؤدي بسهولة إلى صعوبة في التعرف على الأخطاء.

*أداء


يقوم Autoboxing بإنشاء كائنات غير مرئية بوضوح في التعليمة البرمجية. لذلك عندما يحدث autoboxing يعاني الأداء.


   -ما هي فئة المجمع؟


فئة المجمّع هي فئة "wraps" وظيفة فئة أو مكون آخر. بمعنى ، أنه يلتف حول نوع بيانات مبدائي ويعطيها مظهر كائن. الميزة هي أنه يمكن استخدامها كلما كان نوع البيانات البدائية مطلوبًا ككائن. توفر الطبقة Wrapper مجموعة واسعة من الوظائف التي يتعين القيام بها على الأنواع البدائية.



5 معدلات الدخول في  الجافا 

معدل الوصول في الجافا أحد المبادئ الرئيسية  Object Oriented Programming للبرمجة الكائنية التوجه هو "إخفاء المعلومات" ، مما يعني أن الامور لا تكشف عن كل تفاصيلها  للخارج. تمامًا مثل لغات البرمجة الكائنية الأخرى ، لدى Java معدِّلات الوصول لتقييد الوصول إلى أعضاء الصفوف والسمات والأشياء والحزم. تتحكم معدّلات الوصول في مدى ظهور كائن ما لبقية برنامج Java ، وتوفر الحزم أعلى مستوى من التحكم في مستوى رؤية الكائن. على سبيل المثال: فئة غير عامة غير مرئية خارج الحزمة الخاصة بها. هناك 4 معدلات وصول مختلفة متاحة في لغة جافا. فهي عامة ومحمية وخاصّة وغير معدّلة (التصريح بدون معدّل وصول). يُشار أيضًا إلى استخدام "بدون معدّل" أحيانًا باسم "الحزمة الخاصة" أو "الوصول الافتراضي" أو " الوصول الصديق".









private - accessible to the classes only.
protected - accessible to class, package, and subclasses
[default] - accessible to the class and package
public - accessible to global


        -نشرprivate


إذا تم وضع علامة على طريقة أو متغير على أنه خاص أو تم تعيين معد الوصول الخاص به ؛ لا يمكن الوصول إليها بواسطة أي كائن من أي فئة أخرى ، على الرغم من أنه يمكن الوصول إليها من الطرق الأخرى المحددة بواسطة نفس الفئة. أي ، لا يمكن للشفرة داخل الفئات الفرعية الوصول إلى المتغير أو الطريقة ، ولا يمكن التعليمة البرمجية من أي فئة خارجية. وهذا مفيد في المكان الذي تريد فيه منع الفئات الفرعية من تعديل المتغيرات باستثناء عناصر التحكم المتوفرة ورفض تلك القدرة على الآخرين. يُعرف أيضًا معدّلات الوصول الخاصة كمعدّلات الوصول الأصلية.



public class Bill {
    private long total = 0;
}

     -محميprotected



إذا تم وضع علامة على طريقة أو متغير كمحمية أو تم تعيين معدل الوصول المحمي إليه ؛ يمكن الوصول إليها من فئات نفس الحزمة أو فئات فرعية من تلك الفئة. هذا المُعدّل يكون مقيدًا بشكل أقل من القطاع الخاص ولكنه أكثر تقييدًا من الوصول العام. عادة ما نستخدم هذه الكلمة الرئيسية للتأكد من أن متغيرات الفئة يمكن الوصول إليها فقط للفئات الفرعية. تعرف معدّلات الوصول المحمية أيضًا باسم معدّلات الوصول الموروثة.


public class Bill {
    protected long total = 0;
}

         -الافتراضيdefault


افتراضي - ليست كلمة رئيسية ، بل هي كلمات رئيسية عامة وخاصة ومحمية. الأعضاء الافتراضيون أو الأعضاء الذين لديهم "معدِّل وصول" يكونون مرئيين داخل الحزمة. ويتم توريثها للفئات الفرعية فقط التي تقيم في نفس الحزمة. وهذا يعني أنها ليست موروثة ومرئية خارج الحزمة. يُشار أيضًا إلى استخدام "افتراضي" في بعض الأحيان باسم "الحزمة الخاصة" أو "عدم التعديل" أو "الصديق"



public class Bill {
    long long total = 0;
}

في المثال أعلاه ، لا يحتوي الحقل الإجمالي في فئة Bill على معدّل وصول ، مما يعني أنه تم تعيين معد التعديل الافتراضي ضمنيًا.


      -عامةpublic


يمكننا الوصول إلى الأساليب العامة أو المتغيرات من كل فئة من نفس الحزمة أو حزمة أخرى. يمكن الوصول إلى أعضاء الجمهور من أي صف في أي مكان في البرنامج داخل نفس الصف وخارج الصف ، داخل نفس الحزمة وخارج الحزمة. عامة تسمى أيضًا معدّلات الوصول العالمية.


public class Bill {
    public long total = 0;
}

ملاحظة: إذا كانت الطريقة لا تحتوي على أي مُعدّل وصول ، فيمكننا الوصول إليه داخل كل فئة من نفس الحزمة فقط.

*يمكن أن تكون فئة المستوى الأعلى خاصة أو محمية؟


لا ، فطبقة المستوى الأعلى كقطاع خاص لن تكون مجدية تمامًا لأنه لا يمكن الوصول إلى أي شيء. إذا تم الإعلان عن فئة المستوى الأعلى على أنها خاصة ، فسيشتكى المحول البرمجي من أن "المعدل الخاص غير مسموح به هنا".

*هل يمكننا تحديد معدِّلات خاصة ومحمية لمتغيرات في الواجهات؟


تشبه الواجهة مخططًا من أي فصل ، حيث تعلن عن أعضائك. أي فئة تقوم بتنفيذ هذه الواجهة مسؤولة عن تعريفها. وجود أعضاء خاصين أو محميين في واجهة لا معنى له من الناحية المفاهيمية.


6 التعداد في الجافا (التعدادات)

التعداد هو مثل أي فئة class الجافا أخرى ، مع مجموعة محددة مسبقًا من المثيلات. هو في الأساس نوع بيانات يتيح لك وصف كل عضو من نوع بطريقة أكثر سهولة وموثوقية ، على سبيل المثال ، مستوى درجة الحرارة مثل عالي ، متوسط ومنخفض



public enum Temperature {
    HIGH,
    MEDIUM,
    LOW
}

تتمثل الميزة الرئيسية لتعداد Enum في جعل التعليمة البرمجية أكثر وضوحًا وأقل عرضة للخطأ وبطريقة موثقة ذاتيًا.


        -متى يجب علي أن أستخدم التعداد؟


يمكنك استخدام أنواع التعداد في أي وقت تحتاج فيه لتمثيل مجموعة ثابتة من الثوابت.



How to use Java Enumيمكنك استخدام التعدادات عندما يستطيع أحد المتغيرات (خاصةً معلمة أسلوب) أخذ واحد فقط من مجموعة صغيرة من القيم المحتملة. ومن الأمثلة على ذلك أشياء مثل الأيام في أسبوع (الأحد ، الاثنين ، الخ ...) ، أو الاتجاهات (الشمال ، الجنوب ، الشرق والغرب).

يمكنك استخدام تعداد بدلاً من فئة إذا كان يجب أن يكون للفئة عدد ثابت من المثيلات.



  - حالة التبديل  التعداد في  الجافا :  


يمكنك أيضًا استخدام نوع التعداد في رمز تبديل جافا ... بيان الحالة. يمكنك استخدام التعداد في Java داخل العبارة تبديل مثل int أو char البيانات الأولية. يوضح البرنامج التالي كيفية استخدام التعداد في تبديل ... بيان الحالة.



enum Directions {
NORTH, SOUTH, EAST, WEST
}
public class SwitchCaseEnum {
public static void main(String args[])
    {
Directions direct;
direct = Directions.WEST;
switch(direct) {
case NORTH:
System.out.println("You chose NORTH!");
break;
case SOUTH:
System.out.println("You chose SOUTH!");
break;
case EAST:
System.out.println("You chose EAST!");
break;
case WEST:
System.out.println("You chose WEST!");
break;
default:
System.out.println("Invalid Direction....!!");
break;
}
}
}


        -التعداد في الجمل  الشرطية : 


يمكنك أيضًا استخدام نوع التعداد في Java إذا كانت عبارة if..else. يوضح البرنامج التالي كيفية استخدام التعداد في if..else statement.



enum Directions {
NORTH, SOUTH, EAST, WEST
}
public class IfElseEnum {
public static void main(String args[])
    {
Directions direct;
direct = Directions.WEST;
getDirection(direct );
}
public static void getDirection(Directions dir)Java
   {
if (dir == Directions.WEST)
System.out.println("You selected WEST !!");
else
System.out.println("Invalid Direction !!");
}
}


    - مثال عن التعجاج في الحلقة المفرغة 


يعرض برنامج Java التالي كيفية استخدام التعداد في حلقة مفرغة



enum Directions {
NORTH, SOUTH, EAST, WEST
}
public class LoopEnum
{
public static void main(String[] args)
{
int cnt = 1;
// loop through enum
for (Directions dir: Directions.values())
{
System.out.printf("Direction -> %d = %s\n", cnt++, dir);
}
}
}

     -  النقاط التي يستوجب ذكرها  في التعداد بالجافا 


اعتبر التعداد الأكثر أمانًا من الثوابت: أحد الاستخدامات الشائعة للتعداد هو منع إمكانية وجود معلمة غير صالحة. على سبيل المثال ، ضع في اعتبارك طريقة عادية مثل ما يلي:


public void checkDay(int day);


لا تعد الطريقة الموضحة أعلاه ملتبسة فقط (تبدأ مؤشرات اليوم بـ 1 أو عند 0؟) ، ولكن يمكنك إعطاء بيانات غير صحيحة أسفل اليمين مثل أكبر من 7 أو أرقام سالبة. بدلاً من ذلك ، إذا كان لديك تعداد يوم مع الأحد والاثنين ، وما إلى ذلك ، يصبح التوقيع:


public void checkDay(Days day);


سيكون رمز استدعاء هذه الطريقة أكثر قابلية للقراءة ، ولا يمكنه تقديم بيانات غير صالحة.

إن استخدام التعداد على الثوابت يساعد في سلامة الأنواع لأنه إذا أخذت إحدى الوظائف تعدادًا وتمريرها أي شيء غير التعداد ، سيشتكى المترجم. باستخدام الثوابت ، أنت تقبل مجموعة كبيرة جدًا من البيانات ، ومعظمها غير صالح.

يمكن الإعلان عن التعداد خارج أو داخل الصف ، ولكن ليس بطريقة ما.
إضافة ثوابت جديدة على التعداد في Java أمر سهل ، ويمكنك إضافة ثوابت جديدة دون كسر الشفرة الموجودة.

Post a Comment

0 Comments