M.Alkahtani
5/2/2006, 19:16
بسم الله الرحمن الرحيم
نكمل اليوم ما توقفنا عنده سابقاً وهو أعداد الجافا بعد أن أنتهينا من تركيب لغة جافا على الجهاز فمن البديهي أن نستخدم محرر لهذه اللغة أفضل من Notpad الذي مع الوندوز و هذا المحرر هو Jcreator قم بتحميله من هنا
http://www.jcreator.com/download.htm لاحظ
JCreator LE version
build 3.50.013
عند تثبيته أعطه مسار الجافا (مسبقاً ثبته فيه) C:\jdk1.5
لكي يعمل لك compile و run بضغطة زر بدلاً من طباعة javac و java
الكلمات المحجوزة في اللغة:
<table border="1" width="100%" id="table2" dir="ltr"><tr><td>abstract</td><td>const </td><td>final </td><td>int </td><td>public </td><td>throw</td></tr><tr><td>assert </td><td>continue </td><td>finally </td><td>interface </td><td>return </td><td>throws</td></tr><tr><td>boolean </td><td>default </td><td>float </td><td>long </td><td>short </td><td>transient</td></tr><tr><td>break </td><td>do </td><td>for </td><td>native </td><td>static </td><td>true</td></tr><tr><td>byte </td><td>double </td><td>goto </td><td>new </td><td>strictfp </td><td>try</td></tr><tr><td>case </td><td>else </td><td>if </td><td>null </td><td>super </td><td>void</td></tr><tr><td>catch </td><td>enum </td><td>implements </td><td>package </td><td>switch </td><td>volatile</td></tr><tr><td>char </td><td>extends </td><td>import </td><td>private </td><td>synchronized </td><td>while</td></tr><tr><td>class </td><td>false </td><td>instanceof </td><td>protected </td><td>this</td><td></td></tr></table>
المتغيرات في جافا يوضحها الجدول التالي<table cellSpacing="0" cellPadding="4" rules="all" width="100%" border="1" id="table1" dir="ltr"> <thead> <tr> <th class="thead" scope="col"> <p class="docText">Type</th> <th class="thead" scope="col"> <p class="docText">Contains</th> <th class="thead" scope="col"> <p class="docText">Default</th> <th class="thead" scope="col"> <p class="docText">Size</th> <th class="thead" scope="col"> <p class="docText">Range</th> </tr> </thead> <tr> <td class="docTableCell"> <p class="docText"><tt>boolean</tt></td> <td class="docTableCell"> <p class="docText"><tt>true</tt> or <tt>false</tt></td> <td class="docTableCell"> <p class="docText"><tt>false</tt></td> <td class="docTableCell"> <p class="docText">1 bit</td> <td class="docTableCell"> <p class="docText">NA</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>char</tt></td> <td class="docTableCell"> <p class="docText">Unicode character</td> <td class="docTableCell"> <p class="docText"><tt>\u0000</tt></td> <td class="docTableCell"> <p class="docText">16 bits</td> <td class="docTableCell"> <p class="docText"><tt>\u0000</tt> to <tt>\uFFFF</tt></td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>byte</tt></td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">8 bits</td> <td class="docTableCell"> <p class="docText">-128 to 127</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>short</tt></td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">16 bits</td> <td class="docTableCell"> <p class="docText">-32768 to 32767</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>int</tt></td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">32 bits</td> <td class="docTableCell"> <p class="docText">-2147483648 to 2147483647</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>long</tt> </td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">64 bits</td> <td class="docTableCell"> <p class="docText">-9223372036854775808 to 9223372036854775807</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>float</tt></td> <td class="docTableCell"> <p class="docText">IEEE 754 floating point</td> <td class="docTableCell"> <p class="docText">0.0</td> <td class="docTableCell"> <p class="docText">32 bits</td> <td class="docTableCell"> <p class="docText">1.4E-45 to 3.4028235E+38</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>double</tt> </td> <td class="docTableCell"> <p class="docText">IEEE 754 floating point</td> <td class="docTableCell"> <p class="docText">0.0</td> <td class="docTableCell"> <p class="docText">64 bits</td> <td class="docTableCell"> <p class="docText">4.9E-324 to 1.7976931348623157E+308</td> </tr></table>
كما أنه يوجد المتغير من نوع num وهو متغير وصفي
<p dir="ltr">num TLCol { red , amber , green}
TLCol tc;
tc= TLCol.red;</p>
العمليات في جافا:
عمليات الحساب
<li dir="rtl">الجمع (+) عددين-- مثال 2+3=5
<li dir="rtl">الطرح (-) عددين -- مثال 3-2=1
<li dir="rtl">الضرب (*) عددين مثال 3*2=6
<li dir="rtl">القسمة (/) عددين مثال 3/2=1
مثال أخر للعدد الكسري (Float)
<p dir="ltr">7/3.0f = 2.33333
7/0 = خطأ في الحساب
7/0.0 = +∞ موجب ما لا نهاية
0.0/0.0 = NaN</p>
باقي القسمة (%) عددين مثال
<p dir="ltr"> 3%2=1
7%3 =1</p>
العلامة (+,-) لعدد واحد فقط تحدد أشارته أما موجبه أو سالبه
الضرب يسبق القسمة عملية الجمع و الطرح مثلاً
<p dir="ltr">2 + 3 * 4 = 15</p>
إذا أردنا الجمع أولاً ثم الضرب ثانياً نضع الأقواس لنتخلص من المشكلة
<p dir="ltr">(2+3) * 4 = 20</p>
علامة (+) للنصوص (String)
أضافة نص على نص مثال:
<p dir="ltr">a="Hello";
b="World";
a+b="HelloWorld";</p>
علامات الزيادة و النقصان (++,--) تقوم هذه العلامات بزيادة المتغير بواحد أو تنقيصه بواحد سواء كان متغير عددي int أو محدد مصفوفة array index
مثال
<p dir="ltr">i=1;
j=++i;</p>
هذه العمليه ستجعل i و j كل منهما يساوي 2
<p dir="ltr">i = 1;
j = i++;</p>
هذه العملية ستجعل i=2 بينما j=1
العمليتين
<p dir="ltr">x++ و x-- بأمكانك التعبير عنها كما لو أنها (x=x+1 , x=x-1)</p>
عمليات المقارنه
<li dir="rtl">المساواه (= =) تعطي هذه العملية صح (True) إذا كان كلا الطرفين متساوي و خطأ (False) غير ذلك
<li dir="rtl">لا يساوي (!=) عكس المساواه
<li dir="rtl">أقل من (<) تعطي هذه العملية صح (True) إذا كان الطرف الأول أصغر من الطرف الثاني
<li dir="rtl">أقل من أو يساوي (<=) تعطي هذه العملية صح (True) إذا كان الطرف الأول أصغر من أو يساوي الطرف الثاني
<li dir="rtl">أكبر من (>) تعطي هذه العملية صح (True) إذا كان الطرف الأول أكبر من الطرف الثاني
<li dir="rtl">أكبر من أو يساوي (>=) تعطي هذه العملية صح (True) إذا كان الطرف الأول أكبر من أو يساوي الطرف الثاني
عمليات المنطق
<li dir="rtl">الشرطيةAND (&&) تعطي العملية صح إذا كان فقط جميع الطرفين صح و خطأ إذا كان أي من الطرفين خطأ
مثال
<p dir="ltr">if (x < 10 && y > 3) </p>
إذا كان xأكبر من 10 و y أكبر من 3 سيكون الناتج صح
<li dir="rtl"> الشرطية OR (||) تعطي العملية صح إذا كان أي من أطرافها صحيح إذا كان جميعهما خطأ فتعطي خطأ
<li dir="rtl">NOT (!) المنطقية (Boolean) إذا كانت القيمه صح تعكس الى خطأ و أن كانت خطأ تعكس الى صح
<li dir="rtl"> المنطقية AND (&) (Boolean) نفس && لكنها تقوم بحساب الطرفين على عكس && التي تعطي الناتج من طرف إن كان خطأ
<li dir="rtl"> المنطقية OR (|) (Boolean) نفس || لكنها تقوم بحساب الطرفين لذلك أسمي || و && الكسولات lazy and , lazy or
<li dir="rtl"> المنطقية XOR (^) (Boolean) تكون صح في حالة أختلاف الطرفين أحدهما صح و الأخر خطاء و تكون خطاء إذا تشابها كلهما صح أو كلهما خطاء
عمليات البت و التحريك Bitwise and Shift
<li dir="rtl">Bitwise complement (~) ثقوم هذه العملية بعكس البتات من 0 الى 1 و من 1 الى 0 مثال
<p dir="ltr">byte b = ~12;</p>
المكافيء الأحادي (Binaray) للعدد 12 هو 00001100
<p dir="ltr">12=00001100 =>~00001100=11110011 or -13 </p>
و هكذا فأن النتيجه -13 كعدد عشري
<li dir="rtl">Bitwise AND (&) تقوم هذه العملية بعمل AND لعددين أحاديين أو تحويل العددين العشرين الى أحاديين ثم عمل AND لهما
مثال
<p dir="ltr">10 & 7 // 00001010 & 00000111 = => 00000010 or 2</p>
<li dir="rtl">Bitwise OR (|) مثل & لكنها تعمل OR للعددين
مثال
<p dir="ltr">10 | 7 // 00001010 | 00000111 = => 00001111 or 15</p>
<li dir="rtl">Bitwise XOR (^) مثل سابقاتها لكنها تعمل XOR للبتات
مثال
<p dir="ltr">10 ^ 7 // 00001010 ^ 00000111 = => 00001101 or 13</p>
<li dir="rtl">Left shift (<<) تقوم بتحريك البتات اليسرى للعدد الذي على يسار العملية بمقدار العدد الذي على يمين العملية وهذه العملية معروفة في الالكترونيات و برمجة النظم و تعادل الضرب في العدد n الذي على يمين العملية أي كانك تضرب العدد الذي على يسار العملية بمقدار 2<sup>n</sup>
مثال
<p dir="ltr">10 << 1 // 00001010 << 1 = 00010100 = 20 = 10*(2<sup>1</sup>)= 10*2</p>
<p dir="ltr">7 << 3 // 00000111 << 3 = 00111000 = 56 = 7*2<sup>3</sup>)=7*8
-1 << 2 // 0xFFFFFFFF << 2 = 0xFFFFFFFC = -4 = -1*4</p>
<li dir="rtl">Signed right shift (>>) نفس عمل سابقتها و لكنها تحرك البتات التي على اليمين للعدد الذي على يسار العملية بمقدار العدد الذي على يمين العملية و تعرف هذه العملية بالقسمه على 2<sup>n</sup> . إذا كان العدد على يسار العملية موجوب فأن البتات تتحرك من اليسار الى اليمن بإزاحه قدرها العدد الذي على يمين العملية ويوضع مكان البتات التي أزحيت أصفار
أما أن كان سالباً فيوضع واحدات بدل الأصفار و تسمى هذه العملية sign extension
مثال
<p dir="ltr">10 >> 1 // 00001010 >> 1 = 00000101 = 5 = 10/2
27 >> 3 // 00011011 >> 3 = 00000011 = 3 = 27/8
-50 >> 2 // 11001110 >> 2 = 11110011 = -13 != -50/4</p>
<li dir="rtl">Unsigned right shift (>>>)(>>) هذه العملية نفس العملية الأختلاف الوحيد أنها تضع أصفار دائماً في البتات التي أزيحت
<p dir="ltr">0xff >>> 4 // 11111111 >>> 4 = 00001111 = 15 = 255/16
-50 >>> 2 // 0xFFFFFFCE >>> 2 = 0x3FFFFFF3 = 1073741811
</p>
عمليات المساواه
أسهل عملية للمساواه هي = وهي تعطي المتغير x قيمة قدرها y أنتبه أن تخلط بين
= و = =
لكن جافا تعطي مجموعة من عمليات المساوه مع عمليات أخرى مثل
<p dir="ltr">+= -= *= /= %=</p> عمليات مساواه مع عمليات حسابية
<p dir="ltr">&= |= ^= </p> عمليات مساواه مع عمليات البتات
<p dir="ltr"><<= >>= >>>=</p> عمليات مساواه مع عمليات التحريك
ولكي تعرف أهميه هذه العمليات فأنها تقوم بحساب العدد الذي على يسارها ثم تطبق العملية(+,-,....) مع العدد الذي على يمينها ثم تخزنه في العدد الذي على يسارها مره أخرى
فمثلاً
<p dir="ltr">x +=2;</p> تقوم بحساب x ثم جمعه مع 2 ثم تخزنه في x كأنها تقوم بالتالي
<p dir="ltr">x = x +2; </p> لكن أنتبه في بعض العمليات لها تأثير عكسي
فالتعبيرين التاليين غير متساويين
<p dir="ltr">a[i++] += 2;
a[i++] = a[i++] + 2;</p>
العمليات الشرطية
تعمل هذه العمليات عمل if الشرطية فلو تحقق الشرط المتغير يأخذ القيمة من الطرف الثاني إذا لم يتحقق تبقى القيمة كما هي
مثال
<p dir="ltr">int max = (x > y) ? x : y;</p>
عملية instanceof
هذه العملية تقوم بأرجاع صح إذا كان الشيء(Object) شيء من تلك الفئة Class
شوي غير مفهومه لكن المثال بيوضحها
<p dir="ltr">
"string" instanceof String // True: all strings are instances of String
"" instanceof Object // True: strings are also instances of Object
null instanceof String // False: null is never an instance of anything
Object o = new int[] {1,2,3};
o instanceof int[] // True: the array value is an int array
o instanceof byte[] // False: the array value is not a byte array
o instanceof Object // True: all arrays are instances of Object
</p>
تستخدم هذه العملية للتحقق و الحماية و التأكد
<p dir="ltr">if (object instanceof Point) {
Point p = (Point) object;
}</p>
عمليات خاصة
<li dir="rtl">Object member access (.)
ال object عبارة عن مجموعة من البيانات و الطرق التي تعمل على هذه البيانات
حقول البيانات و الطرق ل شيء (object) تسمى أعضاء
العملية (.) تمكن من الدخول لهذه الأعضاء لذلك الشيء
فمثلاً إذا كان f حقل للشيء o فأن o.f تحسب القيمة في ذلك الحقل
و أن كان m طريقة للشيء o فأن o.m تشغل تلك الطريقة بأستخدام عملية الأقواس () كما سنشاهد لاحقاً
<li dir="rtl">Array element access ([])
المصفوفة مجموعة من العناصر لكل عنصر قيمة و محدد يعرف بها
العملية [ ] تمكنك من الدخول الى عناصر هذه المصفوفة عن طريقة محددتها
فأذا كانت a مصفوفة و i تعبير يحسب كعدد int فإن <p dir="ltr">a[i]</p> يعبر عن أحد عناصر تلك المصفوفة
<li dir="rtl">Method invocation (( ))
الطريقة (Method) عبارة عن بعض الأسطر من الكود الذي ينفذ على مجموعه من البيانات
و بعض الطرق لا تأخذ متغيرات و بعضها يأخذ متغيرات فلو كانت m طريقة لا تأخذ متغيرات في الشيء o بأمكاننا تنفيذها بالأمر التالي o.m() و أن كانت تأخذ ثلاثة متغيرات x,y,z فتنفذ بالشكل التالي <p dir="ltr">o.m(x,y,z)</p>
<li dir="rtl">Object creation (new)
لأنشاء شيء (Object) جديد نستخدم العملية new
<p dir="ltr">new ArrayList( );
new Point(1,2)</p>
<li dir="rtl">Type conversion or casting (( ))
للتغير من نوع الى أخر فأننا نستخدم العملية () كالتالي
<p dir="ltr">(int) (x + 3.14f)</p> تحويل من نوع كسري(Float) الى صحيح(Integer)
الجمل و التعابير
جمل التعابير
هذه الجمل شاهدناها سابقاً في أمثلة العمليات فأبسط الجمل المساواة و الأضافة مع المساواه و الضرب مع المساواه و الطباعه كما في الأمثلة التالية
<p dir="ltr">a = 1; // مساواه
x *= 2; // ضرب مع مساواة
i++; // زيادة
--c; // تنقيص
System.out.println("statement"); // تشغيل طريقة الطباعه
الجمل المترابطة هي مجموعة من الجمل التعبيرية بين قوسين {}
<div align="left"><p dir="ltr">for(int i = 0; i < 10; i++) {</p>
<p dir="ltr">a[i]++; // الجسم لهذا العداد عباره عن جمل مترابطة</p>
<p dir="ltr">b[i]--; // فهو يتكنو من جملتين</p>
<p dir="ltr">}</p></div> الجملة الفارغة هي عبارة عن لا شيء
<div align="left"><p dir="ltr">for(int i = 0; i < 10; a[i++]++) // زيادة عناصر المصفوفة</p>
<p dir="ltr">/* empty */; // جسم العداد عباره عن جملة فارغة</p>
</div>
الجمل المعرفة هي عبارة عن جمل عادية يسبقها أسم لها
<div align="left"><p dir="ltr">rowLoop: for(int r = 0; r < rows.length; r++) { // دوار معرف ب rowLoop</p>
<p dir="ltr">colLoop: for(int c = 0; c < columns.length; c++) {// دوار أخر معرف colLoop ب </p>
<p dir="ltr">break rowLoop; // أستخدام التعريف لوقف الدوار الأول rowLoop </p>
<p dir="ltr">}</p>
<p dir="ltr">}</div>
تعريف المتغيرات المحلية
<p dir="ltr">int counter;
String s;</p>
جملة if/else
<div align="left"><p dir="ltr">if (username != null)</p>
<p dir="ltr">System.out.println("Hello " + username);</p>
<p dir="ltr">else {</p>
<p dir="ltr">username = askQuestion("What is your name?");</p>
<p dir="ltr">System.out.println("Hello " + username + ". Welcome!");</p>
<p dir="ltr">}</p></div>
جملة else if
<div align="left"><p dir="ltr">if (n == 1) {</p>
<p dir="ltr">// الكود رقم هنا#1</p>
<p dir="ltr">}</p>
<p dir="ltr">else if (n == 2) {</p>
<p dir="ltr">// الكود رقم هنا#2</p>
<p dir="ltr">}</p>
<p dir="ltr">else {</p>
<p dir="ltr">// جميع الجمل لم تحقق الشرط رقم هنا#4</p>
<p dir="ltr">}</p></div>
جملة switch
<div align="left"><p dir="ltr">switch(n) {</p>
<p dir="ltr">case 1: // أبداء هنا إذا n = = 1</p>
<p dir="ltr"> // ضع الكود رقم#1 هنا</p>
<p dir="ltr">break; // وقف</p>
<p dir="ltr">case 2: // أبداء هنا إذا n = = 2</p>
<p dir="ltr">// ضع الكود رقم#2 هنا</p>
<p dir="ltr">break; // وقف</p>
<p dir="ltr">case 3: // أبداء هنا إذا n = = 3</p>
<p dir="ltr">// ضع الكود رقم#3 هنا</p>
<p dir="ltr">break; // وقفre</p>
<p dir="ltr">default: // أبداء هنا إذا كلهم فشلوا...</p>
<p dir="ltr">// ضع الكود رقم#4 هنا</p>
<p dir="ltr">break; // وقف</p>
<p dir="ltr">}</p></div>
جملة while
هذا برنامج يطبع من 0 الى 9
<div align="left"><p dir="ltr">int count = 0;</p>
<p dir="ltr">while (count < 10) {</p>
<p dir="ltr">System.out.println(count);</p>
<p dir="ltr">count++;</p>
<p dir="ltr">}</p></div>
جملة do
نفس البرنامج السابق لكن ب do
<div align="left"><p dir="ltr">int count = 0;</p>
<p dir="ltr">do {</p>
<p dir="ltr">System.out.println(count);</p>
<p dir="ltr">count++;</p>
<p dir="ltr">} while(count < 10);</p></div>
جملة for
البرنامج السابق بجملة for
<div align="left"><p dir="ltr">int count;</p>
<p dir="ltr">for(count = 0 ; count < 10 ; count++)</p>
<p dir="ltr">System.out.println(count);</p></div>
جملة for/in أو foreach
<div align="left"><p dir="ltr">// الأعداد الي نبغى نطبعها 2,3,5,...</p>
<p dir="ltr">int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 };</p>
<p dir="ltr">// دوار الطباعه </p>
<p dir="ltr">for(int n : primes) // النقطتين تقراء in وهي تدل على أنه يجب أن يكون في الأعداد السابقة</p>
<p dir="ltr">System.out.println(n);</p></div>
جملة break وهي توقف عمل الكود
<div align="left"><p dir="ltr">for(int i = 0; i < data.length; i++) { // البحث داخل مصفوفة</p>
<p dir="ltr">if (data[i] = = target) { // وجدنا العنصر المطلوب</p><p dir="ltr">index = i; // حفظ مكان العنصر</p>
<p dir="ltr">break; // وقف البحث</p>
<p dir="ltr">}</p>
<p dir="ltr">}</p></div>
جملة continue
<div align="left"><p dir="ltr">for(int i = 0; i < data.length; i++) { // البحث في العناصر</p>
<p dir="ltr">if (data[i] = = -1) // إذا كانت قيمة العنصر مفقودة</p><p dir="ltr">continue; // أبحث في العنصر الذي يلية</p><p dir="ltr">process(data[i]); // أكمال العملية</p>
<p dir="ltr">}</p></div>
جملة return
<div align="left"><p dir="ltr">double square(double x) { // طريقة لحساب التربيع لعدد</p>
<p dir="ltr">return x * x; // حساب و إعادة القيمة </p>
<p dir="ltr">}</p></div>
تبقى فقط جمل synchronizedو throwو tryو assert
و سيتم شرحها عند الحاجه لها في البرامج لأن مفهومه معقد نوعاً ما ليس كالجملة السهله السابقة
نكمل اليوم ما توقفنا عنده سابقاً وهو أعداد الجافا بعد أن أنتهينا من تركيب لغة جافا على الجهاز فمن البديهي أن نستخدم محرر لهذه اللغة أفضل من Notpad الذي مع الوندوز و هذا المحرر هو Jcreator قم بتحميله من هنا
http://www.jcreator.com/download.htm لاحظ
JCreator LE version
build 3.50.013
عند تثبيته أعطه مسار الجافا (مسبقاً ثبته فيه) C:\jdk1.5
لكي يعمل لك compile و run بضغطة زر بدلاً من طباعة javac و java
الكلمات المحجوزة في اللغة:
<table border="1" width="100%" id="table2" dir="ltr"><tr><td>abstract</td><td>const </td><td>final </td><td>int </td><td>public </td><td>throw</td></tr><tr><td>assert </td><td>continue </td><td>finally </td><td>interface </td><td>return </td><td>throws</td></tr><tr><td>boolean </td><td>default </td><td>float </td><td>long </td><td>short </td><td>transient</td></tr><tr><td>break </td><td>do </td><td>for </td><td>native </td><td>static </td><td>true</td></tr><tr><td>byte </td><td>double </td><td>goto </td><td>new </td><td>strictfp </td><td>try</td></tr><tr><td>case </td><td>else </td><td>if </td><td>null </td><td>super </td><td>void</td></tr><tr><td>catch </td><td>enum </td><td>implements </td><td>package </td><td>switch </td><td>volatile</td></tr><tr><td>char </td><td>extends </td><td>import </td><td>private </td><td>synchronized </td><td>while</td></tr><tr><td>class </td><td>false </td><td>instanceof </td><td>protected </td><td>this</td><td></td></tr></table>
المتغيرات في جافا يوضحها الجدول التالي<table cellSpacing="0" cellPadding="4" rules="all" width="100%" border="1" id="table1" dir="ltr"> <thead> <tr> <th class="thead" scope="col"> <p class="docText">Type</th> <th class="thead" scope="col"> <p class="docText">Contains</th> <th class="thead" scope="col"> <p class="docText">Default</th> <th class="thead" scope="col"> <p class="docText">Size</th> <th class="thead" scope="col"> <p class="docText">Range</th> </tr> </thead> <tr> <td class="docTableCell"> <p class="docText"><tt>boolean</tt></td> <td class="docTableCell"> <p class="docText"><tt>true</tt> or <tt>false</tt></td> <td class="docTableCell"> <p class="docText"><tt>false</tt></td> <td class="docTableCell"> <p class="docText">1 bit</td> <td class="docTableCell"> <p class="docText">NA</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>char</tt></td> <td class="docTableCell"> <p class="docText">Unicode character</td> <td class="docTableCell"> <p class="docText"><tt>\u0000</tt></td> <td class="docTableCell"> <p class="docText">16 bits</td> <td class="docTableCell"> <p class="docText"><tt>\u0000</tt> to <tt>\uFFFF</tt></td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>byte</tt></td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">8 bits</td> <td class="docTableCell"> <p class="docText">-128 to 127</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>short</tt></td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">16 bits</td> <td class="docTableCell"> <p class="docText">-32768 to 32767</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>int</tt></td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">32 bits</td> <td class="docTableCell"> <p class="docText">-2147483648 to 2147483647</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>long</tt> </td> <td class="docTableCell"> <p class="docText">Signed integer</td> <td class="docTableCell"> <p class="docText">0</td> <td class="docTableCell"> <p class="docText">64 bits</td> <td class="docTableCell"> <p class="docText">-9223372036854775808 to 9223372036854775807</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>float</tt></td> <td class="docTableCell"> <p class="docText">IEEE 754 floating point</td> <td class="docTableCell"> <p class="docText">0.0</td> <td class="docTableCell"> <p class="docText">32 bits</td> <td class="docTableCell"> <p class="docText">1.4E-45 to 3.4028235E+38</td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>double</tt> </td> <td class="docTableCell"> <p class="docText">IEEE 754 floating point</td> <td class="docTableCell"> <p class="docText">0.0</td> <td class="docTableCell"> <p class="docText">64 bits</td> <td class="docTableCell"> <p class="docText">4.9E-324 to 1.7976931348623157E+308</td> </tr></table>
كما أنه يوجد المتغير من نوع num وهو متغير وصفي
<p dir="ltr">num TLCol { red , amber , green}
TLCol tc;
tc= TLCol.red;</p>
العمليات في جافا:
عمليات الحساب
<li dir="rtl">الجمع (+) عددين-- مثال 2+3=5
<li dir="rtl">الطرح (-) عددين -- مثال 3-2=1
<li dir="rtl">الضرب (*) عددين مثال 3*2=6
<li dir="rtl">القسمة (/) عددين مثال 3/2=1
مثال أخر للعدد الكسري (Float)
<p dir="ltr">7/3.0f = 2.33333
7/0 = خطأ في الحساب
7/0.0 = +∞ موجب ما لا نهاية
0.0/0.0 = NaN</p>
باقي القسمة (%) عددين مثال
<p dir="ltr"> 3%2=1
7%3 =1</p>
العلامة (+,-) لعدد واحد فقط تحدد أشارته أما موجبه أو سالبه
الضرب يسبق القسمة عملية الجمع و الطرح مثلاً
<p dir="ltr">2 + 3 * 4 = 15</p>
إذا أردنا الجمع أولاً ثم الضرب ثانياً نضع الأقواس لنتخلص من المشكلة
<p dir="ltr">(2+3) * 4 = 20</p>
علامة (+) للنصوص (String)
أضافة نص على نص مثال:
<p dir="ltr">a="Hello";
b="World";
a+b="HelloWorld";</p>
علامات الزيادة و النقصان (++,--) تقوم هذه العلامات بزيادة المتغير بواحد أو تنقيصه بواحد سواء كان متغير عددي int أو محدد مصفوفة array index
مثال
<p dir="ltr">i=1;
j=++i;</p>
هذه العمليه ستجعل i و j كل منهما يساوي 2
<p dir="ltr">i = 1;
j = i++;</p>
هذه العملية ستجعل i=2 بينما j=1
العمليتين
<p dir="ltr">x++ و x-- بأمكانك التعبير عنها كما لو أنها (x=x+1 , x=x-1)</p>
عمليات المقارنه
<li dir="rtl">المساواه (= =) تعطي هذه العملية صح (True) إذا كان كلا الطرفين متساوي و خطأ (False) غير ذلك
<li dir="rtl">لا يساوي (!=) عكس المساواه
<li dir="rtl">أقل من (<) تعطي هذه العملية صح (True) إذا كان الطرف الأول أصغر من الطرف الثاني
<li dir="rtl">أقل من أو يساوي (<=) تعطي هذه العملية صح (True) إذا كان الطرف الأول أصغر من أو يساوي الطرف الثاني
<li dir="rtl">أكبر من (>) تعطي هذه العملية صح (True) إذا كان الطرف الأول أكبر من الطرف الثاني
<li dir="rtl">أكبر من أو يساوي (>=) تعطي هذه العملية صح (True) إذا كان الطرف الأول أكبر من أو يساوي الطرف الثاني
عمليات المنطق
<li dir="rtl">الشرطيةAND (&&) تعطي العملية صح إذا كان فقط جميع الطرفين صح و خطأ إذا كان أي من الطرفين خطأ
مثال
<p dir="ltr">if (x < 10 && y > 3) </p>
إذا كان xأكبر من 10 و y أكبر من 3 سيكون الناتج صح
<li dir="rtl"> الشرطية OR (||) تعطي العملية صح إذا كان أي من أطرافها صحيح إذا كان جميعهما خطأ فتعطي خطأ
<li dir="rtl">NOT (!) المنطقية (Boolean) إذا كانت القيمه صح تعكس الى خطأ و أن كانت خطأ تعكس الى صح
<li dir="rtl"> المنطقية AND (&) (Boolean) نفس && لكنها تقوم بحساب الطرفين على عكس && التي تعطي الناتج من طرف إن كان خطأ
<li dir="rtl"> المنطقية OR (|) (Boolean) نفس || لكنها تقوم بحساب الطرفين لذلك أسمي || و && الكسولات lazy and , lazy or
<li dir="rtl"> المنطقية XOR (^) (Boolean) تكون صح في حالة أختلاف الطرفين أحدهما صح و الأخر خطاء و تكون خطاء إذا تشابها كلهما صح أو كلهما خطاء
عمليات البت و التحريك Bitwise and Shift
<li dir="rtl">Bitwise complement (~) ثقوم هذه العملية بعكس البتات من 0 الى 1 و من 1 الى 0 مثال
<p dir="ltr">byte b = ~12;</p>
المكافيء الأحادي (Binaray) للعدد 12 هو 00001100
<p dir="ltr">12=00001100 =>~00001100=11110011 or -13 </p>
و هكذا فأن النتيجه -13 كعدد عشري
<li dir="rtl">Bitwise AND (&) تقوم هذه العملية بعمل AND لعددين أحاديين أو تحويل العددين العشرين الى أحاديين ثم عمل AND لهما
مثال
<p dir="ltr">10 & 7 // 00001010 & 00000111 = => 00000010 or 2</p>
<li dir="rtl">Bitwise OR (|) مثل & لكنها تعمل OR للعددين
مثال
<p dir="ltr">10 | 7 // 00001010 | 00000111 = => 00001111 or 15</p>
<li dir="rtl">Bitwise XOR (^) مثل سابقاتها لكنها تعمل XOR للبتات
مثال
<p dir="ltr">10 ^ 7 // 00001010 ^ 00000111 = => 00001101 or 13</p>
<li dir="rtl">Left shift (<<) تقوم بتحريك البتات اليسرى للعدد الذي على يسار العملية بمقدار العدد الذي على يمين العملية وهذه العملية معروفة في الالكترونيات و برمجة النظم و تعادل الضرب في العدد n الذي على يمين العملية أي كانك تضرب العدد الذي على يسار العملية بمقدار 2<sup>n</sup>
مثال
<p dir="ltr">10 << 1 // 00001010 << 1 = 00010100 = 20 = 10*(2<sup>1</sup>)= 10*2</p>
<p dir="ltr">7 << 3 // 00000111 << 3 = 00111000 = 56 = 7*2<sup>3</sup>)=7*8
-1 << 2 // 0xFFFFFFFF << 2 = 0xFFFFFFFC = -4 = -1*4</p>
<li dir="rtl">Signed right shift (>>) نفس عمل سابقتها و لكنها تحرك البتات التي على اليمين للعدد الذي على يسار العملية بمقدار العدد الذي على يمين العملية و تعرف هذه العملية بالقسمه على 2<sup>n</sup> . إذا كان العدد على يسار العملية موجوب فأن البتات تتحرك من اليسار الى اليمن بإزاحه قدرها العدد الذي على يمين العملية ويوضع مكان البتات التي أزحيت أصفار
أما أن كان سالباً فيوضع واحدات بدل الأصفار و تسمى هذه العملية sign extension
مثال
<p dir="ltr">10 >> 1 // 00001010 >> 1 = 00000101 = 5 = 10/2
27 >> 3 // 00011011 >> 3 = 00000011 = 3 = 27/8
-50 >> 2 // 11001110 >> 2 = 11110011 = -13 != -50/4</p>
<li dir="rtl">Unsigned right shift (>>>)(>>) هذه العملية نفس العملية الأختلاف الوحيد أنها تضع أصفار دائماً في البتات التي أزيحت
<p dir="ltr">0xff >>> 4 // 11111111 >>> 4 = 00001111 = 15 = 255/16
-50 >>> 2 // 0xFFFFFFCE >>> 2 = 0x3FFFFFF3 = 1073741811
</p>
عمليات المساواه
أسهل عملية للمساواه هي = وهي تعطي المتغير x قيمة قدرها y أنتبه أن تخلط بين
= و = =
لكن جافا تعطي مجموعة من عمليات المساوه مع عمليات أخرى مثل
<p dir="ltr">+= -= *= /= %=</p> عمليات مساواه مع عمليات حسابية
<p dir="ltr">&= |= ^= </p> عمليات مساواه مع عمليات البتات
<p dir="ltr"><<= >>= >>>=</p> عمليات مساواه مع عمليات التحريك
ولكي تعرف أهميه هذه العمليات فأنها تقوم بحساب العدد الذي على يسارها ثم تطبق العملية(+,-,....) مع العدد الذي على يمينها ثم تخزنه في العدد الذي على يسارها مره أخرى
فمثلاً
<p dir="ltr">x +=2;</p> تقوم بحساب x ثم جمعه مع 2 ثم تخزنه في x كأنها تقوم بالتالي
<p dir="ltr">x = x +2; </p> لكن أنتبه في بعض العمليات لها تأثير عكسي
فالتعبيرين التاليين غير متساويين
<p dir="ltr">a[i++] += 2;
a[i++] = a[i++] + 2;</p>
العمليات الشرطية
تعمل هذه العمليات عمل if الشرطية فلو تحقق الشرط المتغير يأخذ القيمة من الطرف الثاني إذا لم يتحقق تبقى القيمة كما هي
مثال
<p dir="ltr">int max = (x > y) ? x : y;</p>
عملية instanceof
هذه العملية تقوم بأرجاع صح إذا كان الشيء(Object) شيء من تلك الفئة Class
شوي غير مفهومه لكن المثال بيوضحها
<p dir="ltr">
"string" instanceof String // True: all strings are instances of String
"" instanceof Object // True: strings are also instances of Object
null instanceof String // False: null is never an instance of anything
Object o = new int[] {1,2,3};
o instanceof int[] // True: the array value is an int array
o instanceof byte[] // False: the array value is not a byte array
o instanceof Object // True: all arrays are instances of Object
</p>
تستخدم هذه العملية للتحقق و الحماية و التأكد
<p dir="ltr">if (object instanceof Point) {
Point p = (Point) object;
}</p>
عمليات خاصة
<li dir="rtl">Object member access (.)
ال object عبارة عن مجموعة من البيانات و الطرق التي تعمل على هذه البيانات
حقول البيانات و الطرق ل شيء (object) تسمى أعضاء
العملية (.) تمكن من الدخول لهذه الأعضاء لذلك الشيء
فمثلاً إذا كان f حقل للشيء o فأن o.f تحسب القيمة في ذلك الحقل
و أن كان m طريقة للشيء o فأن o.m تشغل تلك الطريقة بأستخدام عملية الأقواس () كما سنشاهد لاحقاً
<li dir="rtl">Array element access ([])
المصفوفة مجموعة من العناصر لكل عنصر قيمة و محدد يعرف بها
العملية [ ] تمكنك من الدخول الى عناصر هذه المصفوفة عن طريقة محددتها
فأذا كانت a مصفوفة و i تعبير يحسب كعدد int فإن <p dir="ltr">a[i]</p> يعبر عن أحد عناصر تلك المصفوفة
<li dir="rtl">Method invocation (( ))
الطريقة (Method) عبارة عن بعض الأسطر من الكود الذي ينفذ على مجموعه من البيانات
و بعض الطرق لا تأخذ متغيرات و بعضها يأخذ متغيرات فلو كانت m طريقة لا تأخذ متغيرات في الشيء o بأمكاننا تنفيذها بالأمر التالي o.m() و أن كانت تأخذ ثلاثة متغيرات x,y,z فتنفذ بالشكل التالي <p dir="ltr">o.m(x,y,z)</p>
<li dir="rtl">Object creation (new)
لأنشاء شيء (Object) جديد نستخدم العملية new
<p dir="ltr">new ArrayList( );
new Point(1,2)</p>
<li dir="rtl">Type conversion or casting (( ))
للتغير من نوع الى أخر فأننا نستخدم العملية () كالتالي
<p dir="ltr">(int) (x + 3.14f)</p> تحويل من نوع كسري(Float) الى صحيح(Integer)
الجمل و التعابير
جمل التعابير
هذه الجمل شاهدناها سابقاً في أمثلة العمليات فأبسط الجمل المساواة و الأضافة مع المساواه و الضرب مع المساواه و الطباعه كما في الأمثلة التالية
<p dir="ltr">a = 1; // مساواه
x *= 2; // ضرب مع مساواة
i++; // زيادة
--c; // تنقيص
System.out.println("statement"); // تشغيل طريقة الطباعه
الجمل المترابطة هي مجموعة من الجمل التعبيرية بين قوسين {}
<div align="left"><p dir="ltr">for(int i = 0; i < 10; i++) {</p>
<p dir="ltr">a[i]++; // الجسم لهذا العداد عباره عن جمل مترابطة</p>
<p dir="ltr">b[i]--; // فهو يتكنو من جملتين</p>
<p dir="ltr">}</p></div> الجملة الفارغة هي عبارة عن لا شيء
<div align="left"><p dir="ltr">for(int i = 0; i < 10; a[i++]++) // زيادة عناصر المصفوفة</p>
<p dir="ltr">/* empty */; // جسم العداد عباره عن جملة فارغة</p>
</div>
الجمل المعرفة هي عبارة عن جمل عادية يسبقها أسم لها
<div align="left"><p dir="ltr">rowLoop: for(int r = 0; r < rows.length; r++) { // دوار معرف ب rowLoop</p>
<p dir="ltr">colLoop: for(int c = 0; c < columns.length; c++) {// دوار أخر معرف colLoop ب </p>
<p dir="ltr">break rowLoop; // أستخدام التعريف لوقف الدوار الأول rowLoop </p>
<p dir="ltr">}</p>
<p dir="ltr">}</div>
تعريف المتغيرات المحلية
<p dir="ltr">int counter;
String s;</p>
جملة if/else
<div align="left"><p dir="ltr">if (username != null)</p>
<p dir="ltr">System.out.println("Hello " + username);</p>
<p dir="ltr">else {</p>
<p dir="ltr">username = askQuestion("What is your name?");</p>
<p dir="ltr">System.out.println("Hello " + username + ". Welcome!");</p>
<p dir="ltr">}</p></div>
جملة else if
<div align="left"><p dir="ltr">if (n == 1) {</p>
<p dir="ltr">// الكود رقم هنا#1</p>
<p dir="ltr">}</p>
<p dir="ltr">else if (n == 2) {</p>
<p dir="ltr">// الكود رقم هنا#2</p>
<p dir="ltr">}</p>
<p dir="ltr">else {</p>
<p dir="ltr">// جميع الجمل لم تحقق الشرط رقم هنا#4</p>
<p dir="ltr">}</p></div>
جملة switch
<div align="left"><p dir="ltr">switch(n) {</p>
<p dir="ltr">case 1: // أبداء هنا إذا n = = 1</p>
<p dir="ltr"> // ضع الكود رقم#1 هنا</p>
<p dir="ltr">break; // وقف</p>
<p dir="ltr">case 2: // أبداء هنا إذا n = = 2</p>
<p dir="ltr">// ضع الكود رقم#2 هنا</p>
<p dir="ltr">break; // وقف</p>
<p dir="ltr">case 3: // أبداء هنا إذا n = = 3</p>
<p dir="ltr">// ضع الكود رقم#3 هنا</p>
<p dir="ltr">break; // وقفre</p>
<p dir="ltr">default: // أبداء هنا إذا كلهم فشلوا...</p>
<p dir="ltr">// ضع الكود رقم#4 هنا</p>
<p dir="ltr">break; // وقف</p>
<p dir="ltr">}</p></div>
جملة while
هذا برنامج يطبع من 0 الى 9
<div align="left"><p dir="ltr">int count = 0;</p>
<p dir="ltr">while (count < 10) {</p>
<p dir="ltr">System.out.println(count);</p>
<p dir="ltr">count++;</p>
<p dir="ltr">}</p></div>
جملة do
نفس البرنامج السابق لكن ب do
<div align="left"><p dir="ltr">int count = 0;</p>
<p dir="ltr">do {</p>
<p dir="ltr">System.out.println(count);</p>
<p dir="ltr">count++;</p>
<p dir="ltr">} while(count < 10);</p></div>
جملة for
البرنامج السابق بجملة for
<div align="left"><p dir="ltr">int count;</p>
<p dir="ltr">for(count = 0 ; count < 10 ; count++)</p>
<p dir="ltr">System.out.println(count);</p></div>
جملة for/in أو foreach
<div align="left"><p dir="ltr">// الأعداد الي نبغى نطبعها 2,3,5,...</p>
<p dir="ltr">int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 };</p>
<p dir="ltr">// دوار الطباعه </p>
<p dir="ltr">for(int n : primes) // النقطتين تقراء in وهي تدل على أنه يجب أن يكون في الأعداد السابقة</p>
<p dir="ltr">System.out.println(n);</p></div>
جملة break وهي توقف عمل الكود
<div align="left"><p dir="ltr">for(int i = 0; i < data.length; i++) { // البحث داخل مصفوفة</p>
<p dir="ltr">if (data[i] = = target) { // وجدنا العنصر المطلوب</p><p dir="ltr">index = i; // حفظ مكان العنصر</p>
<p dir="ltr">break; // وقف البحث</p>
<p dir="ltr">}</p>
<p dir="ltr">}</p></div>
جملة continue
<div align="left"><p dir="ltr">for(int i = 0; i < data.length; i++) { // البحث في العناصر</p>
<p dir="ltr">if (data[i] = = -1) // إذا كانت قيمة العنصر مفقودة</p><p dir="ltr">continue; // أبحث في العنصر الذي يلية</p><p dir="ltr">process(data[i]); // أكمال العملية</p>
<p dir="ltr">}</p></div>
جملة return
<div align="left"><p dir="ltr">double square(double x) { // طريقة لحساب التربيع لعدد</p>
<p dir="ltr">return x * x; // حساب و إعادة القيمة </p>
<p dir="ltr">}</p></div>
تبقى فقط جمل synchronizedو throwو tryو assert
و سيتم شرحها عند الحاجه لها في البرامج لأن مفهومه معقد نوعاً ما ليس كالجملة السهله السابقة