Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 88

‫اعداد وتقديم المدرب ‪ /‬عجيم ال مطارد‬

‫هل أنا جاهز لتعلم لغة‪ Java‬؟‬


‫إذا كنت مبتدئًا في البرمجة‪ ,‬يجب أن تدرس الخوارزميات قبل أن تبدأ مباشرًة بدراسة لغة جافا‪,‬‬
‫ألنك بحاجة لمعرفة مبادئ البرمجة قبل أن تتعلم أي لغة برمجة‪.‬‬
‫ال تقلق إذا لم يسبق لك أن تعلمتها ألننا شرحنا الخوارزميات من الصفر‪.‬‬
‫ما هي لغة جافا؟‬
‫‪ JAVA‬تكتب جافا باللغة العربية و هي لغة برمجة عالية المستوى ابتكرها ‪ James Gosling‬في‬
‫عام ‪ 1991‬أثناء عمله في مختبرات شركة ‪ Sun Microsystems‬و ذلك الستخدامها بمثابة العقل‬
‫المفكر المستخدم لتشغيل األجهزة الذكية‪.‬‬
‫عام ‪ 1995‬تم تطويرها لبناء تطبيقات للويب‪ ,‬السيرفرات‪ ,‬سطح المكتب‪ ,‬الهواتف و الروبوتات‪.‬‬
‫و هي تعمل على جميع و أهم أنظمة التشغيل مثل ‪Windows, Mac‬‬
‫‪ OS, Linux, Unix, Android‬إلخ‪ ..‬و تعتبر من أشهر لغات البرمجة على اإلطالق‪.‬‬
‫حاليًا ماليين األجهزة اإللكترونية مبرمجة على لغة جافا‪ .‬و هذا شعار لغة جافا‪:‬‬

‫مميزات لغة جافا بالنسبة للمطورين‬


‫لها شعبية هائلة و هناك الكثير من المراجع لمن يريد تعلمها‪.‬‬
‫بسيطة و تعلمها سهل مقارنًة مع غيرها من اللغات‪.‬‬
‫شبيهة باللغتين ‪ C‬و ‪ ++C‬و لكن التعامل معها أسهل و سلس أكثر‪.‬‬
‫إذا أنشأت برنامجًا باستخدام لغة جافا فإن البرنامج يعمل على أي نظام في العالم و هذا من أهم ما يدفعك‬
‫لتعلمها‪.‬‬
‫لغة جافا مطلوبة جدًا في الخارج‪ ,‬إذا كنت تريد دخول سوق العمل فلغة جافا توفر لك الكثير من الفرص‪.‬‬
‫طريقة عمل برنامج مكتوب بلغة جافا‬
‫الكود الذي تكتبه على الكمبيوتر ال يعمل بشكل مباشر بل يمر بعدة مراحل تباعًا حتى يعمل تمامًا كما في الصورة‬
‫التالية‪.‬‬

‫إذًا الكود الذي تقوم بكتابته و الذي يسمى ‪ ,Source Code‬يتم تحويله بواسطة مترجم لغة جافا ( ‪ ) javac‬إلى كود‬
‫يفهمه الكمبيوتر يسمى ‪.Byte Code‬‬
‫بعدها يقوم الـ ‪ JVM‬بتحويل الـ ‪ Byte Code‬إلى برنامج يعمل على أي نظام تشغيل كان سواء ‪Windows, Linux,‬‬
‫‪.Marcos‬‬
‫مصطلحات تقنية‬
‫‪ :Source Code‬تعني الكود أو الشفرة المصدرية‪ ,‬و يقال لها أيضًا سورس كود‪.‬‬
‫‪ :Byte Code‬الكود الذي تفهمه اآللة و هنا تجد أن الكود كله يتألف من رقمين و هما‪ 0 :‬و ‪.1‬‬
‫‪ :java‬اختصار لـ ‪ Java Compiler‬و يسمى مترجم لغة جافا‪ .‬فعليًا هو برنامج يحول الكود المكتوب بلغة جافا إلى‬
‫‪.Byte Code‬‬
‫‪ :Interpreter‬هو البرنامج الذي يشغل الـ ‪ Byte Code‬كبرنامج على نظام التشغيل‪.‬‬
‫‪ :JVM‬اختصار لـ ‪ Java Virtual Machine‬و هو عبارة عن ‪ Interpreter‬خاص لتشغيل الـ ‪ Byte Code‬الذي‬
‫أصله في األساس كود جافا كأي برنامج عادي‪.‬‬
‫‪ :OS‬اختصار لـ ‪ Operating System‬و التي تعني نظام التشغيل‬
‫مفهوم الـ ‪JDK‬‬
‫كما الحظت سابقًا‪ ,‬الكود المكتوب بلغة جافا يمر بعدة مراحل حتى يعمل‪ .‬و السبب الرئيسي في ذلك أن نظام التشغيل ليس‬
‫مكتوبًا بلغة جافا‪.‬‬
‫من هذا المنطلق‪ ,‬عليك معرفة أنه حتى يتعرف نظام التشغيل الذي تستخدمه على لغة جافا تحتاج تحميل و تنصيب أدوات‬
‫تطوير جافا ( ‪ ) Java Development Kit‬و التي يقال لها ‪.JDK‬‬

‫الـ ‪ JDK‬بدوره يتضمن أشياء كثيرة جدًا مثل‪:‬‬


‫الكالسات الجاهزة في جافا‪.‬‬
‫الشروحات للكالسات و الدوال الجاهزة التي تظهر لك أثناء كتابتك للكود و التي تسمى ‪.javadoc‬‬
‫مترجم لغة جافا ‪.javac‬‬
‫مشغل لغة جافا ( ‪ ) Jave Runtime Environment‬الذي يختصر بـ ‪ JRE‬و الذي بدوره يحتوي على الـ ‪.JVM‬‬

‫خالصة‬
‫بدون الـ ‪ JDK‬لن يستطيع نظام التشغيل التعرف على لغة جافا‪ .‬و بالتالي لن يستطيع تشغيل أي كود أو حتى‬
‫برنامج جاهز مكتوب بلغة جافا‪.‬‬
‫تجهيز بيئة العمل‬

‫تحميل و تثبيت الـ ‪JDK‬‬

‫في البداية‪ ,‬سنقوم بتحميل إصدار الـ ‪ jdk 8‬بالتحديد ألننا بعد قليل سنقوم بتحميل برنامج ‪ Netbeans‬المبني في‬
‫األساس لهذا اإلصدار‪.‬‬
‫اآلن قم باتباع الخطوات التالية‪:‬‬
‫إبحث في جوجل عن ‪.jdk 8‬‬
‫أنقر على رابط أول موقع يظهر لك في نتائج البحث و سيكون الموقع من موقع ‪ Oracle‬كما يظهر في الرابط ألنها‬
‫هي من قامت بتطوير الـ ‪.jdk 8‬‬
‫بعد أن تفتح الصفحة الجديدة‪ ,‬قم بالنزول قليًال حتى تجد جملة ‪.Java SE Development Kit 8‬‬
‫أول شيء عليك فعله هنا هو النقر على ‪ Accept License Agreement‬لكي يسمح لك بتحميل نسخة‬
‫من الـ ‪.JDK‬‬
‫بعدها قم بالنقر على النسخة التي تتناسب مع حاسوبك حتى يتم تحميلها‪.‬‬
‫مالحظة‪ :‬في حال كنت ال تعرف النسخة التي تتناسب مع حاسوبك‪ ,‬قم بتحميل النسخة ما قبل األخيرة ألنها‬
‫تعمل على جميع أنظمة ويندوز‪.‬‬

‫بعد تحميل الـ ‪ ,JDK‬قم بفتحه حتى تبدأ بتنصيبه‪.‬‬


‫خطوات تحميل و تثبيت برنامج ‪NetBeans‬‬
‫شاهد الخطوات التالية لتتعلم كيف تقوم بتحميل و تثبيت إصدار برنامج ‪ NetBeans‬المالئم لحاسوبك‪.‬‬
‫سبب إستخدامنا لبرنامج الـ ‪ Netbeans‬هو أنه مجاني‪ ,‬سهل اإلستخدام و يساعد كثيرًا في كتابة الكود‪.‬‬
‫هنا خطوات تحميله و تنصيبه‪.‬‬

‫خطوات تحميل و تنصيب برنامج ‪Net Beans‬‬


‫ابحث في جوجل عن ‪.net beans download‬‬
‫أنقر على رابط أول موقع يظهر لك في نتائج البحث و سيكون الموقع هو موقع ‪ netbeans‬نفسه كما يظهر في‬
‫الرابط‪.‬‬
‫بعد أن تفتح الصفحة الجديدة‪ ,‬قم بتحميل نسخة ‪ NetBeans‬الخاصة بـ ‪ Java SE‬ألنها النسخة التي نحتاجها‪.‬‬
‫بعدها ستفتح الصفحة التالية و يبدأ التحميل بشكل تلقائي‪.‬‬
‫إذا لم يبدأ بالتحميل بشكل تلقائي‪ ,‬قم بالنقر على رباط التحميل الذي أشرنا إليه‪.‬‬
‫بعد تحميل الـ ‪ ,NetBeans‬قم بفتحه حتى تبدأ بتنصيبه‪.‬‬
‫الشكل العام ألي برنامج مكتوب بلغة جافا‬
‫الكالس األساسي في المشروع يجب أن يكون شكله كالتالي‪.‬‬

‫{ هنا يوضع إسم الكالس ‪public class‬‬


‫{ )‪public static void main(String[] args‬‬

‫هنا يجب تضع األوامر التي ستنفذ عند تشغيل البرنامج‬

‫}‬

‫}‬

‫في العادة الكالس األساسي في المشروع يتم تسميته ‪ Main‬مع اإلشارة إلى أن هذا ال يعني أنك مجبر على تسميته‬
‫كذلك‪.‬‬
‫الكود الذي يتنفذ مباشرًة عند تشغيل البرنامج هو الكود الذي نكتبه بداخل حدود الدالة ‪.)(main‬‬
‫سنتطرق إلى مزيد من التفاصيل في الدرس التالي‪.‬‬
‫في المثال التالي قمنا بإنشاء برنامج إسمه ‪ ,Main‬موجود بداخل مجلد إسمه ‪ ,main‬مهمته فقط طباعة‬
‫الجملة "‪ "!Hello World‬عند التشغيل‪.‬‬

‫{ ‪1.public class Main‬‬


‫{ )‪2.public static void main(String[] args‬‬
‫;)"!‪3.System. Out .println("Hello World‬‬
‫}‪4.‬‬
‫}‪5.‬‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫!‪Hello World‬‬
‫‪Java‬أساسيات لغة جافا‬
‫بناء برنامج بلغة جافا‬
‫يمكننا تعريف أي برنامج مكتوب بلغة جافا على أنه مجموعة من الكائنات مرتبطة مع بعضها البعض بشكل‬
‫منطقي و متسلسل‪.‬‬
‫في هذا الدرس سنعطيك فكرة عامة عن بعض المصطلحات األساسية في لغة جافا مع اإلشارة إلى أنك‬
‫ستتعرف على كل مصطلح منهم بتفصيل في الدروس الالحقة‪.‬‬
‫المصطلحات األساسية في لغة جافا هي التالية‪.‬‬
‫الكالس ‪)) Class‬‬
‫الكائن ‪)) Object‬‬
‫الخصائص ‪)) Instance variables‬‬
‫الدوال ‪)) Methods‬‬
‫مفهوم الكالس‬
‫الكالس عبارة عن حاوية كبيرة تستطيع أن تحتوي كل الكود من متغيرات و دوال و كائنات إلخ‪..‬‬
‫مفهوم الكائن‬
‫الكائن عبارة عن نسخة مطابقة لكالس معين‪.‬‬
‫بما أن الكائن عبارة عن نسخة من الكالس‪ ,‬يمكننا القول أنه ال يمكن إنشاء كائن إذا لم يكن هناك كالس‪.‬‬
‫إذًا في مفهوم برمجة الكائنات نقوم بإنشاء كالس معين يسمونه ‪ blue print‬أي (النسخة الخام أو النسخة األصلية) ‪ ,‬و‬
‫بعدها ننشئ نسخة أو أكثر من هذا الكالس و نفعل بها ما نريد بدون أن نغير محتويات الكالس األساسي و هكذا نكون‬
‫حافظنا على كودات الكالس األساسي ألننا نعدل على النسخ و ليس عليه مباشرًة‪.‬‬
‫الفكرة األساسية في برمجة الكائنات أنك تقوم بتقسيم البرنامج الواحد إلى عدة كالسات‪ ,‬و كل كالس يتم برمجته لتنفيذ‬
‫ناحية معينة في البرنامج‪.‬‬
‫بعد اإلنتهاء من كل أقسام البرنامج الموجودة في عدة كالسات‪ ,‬نقوم فقط بإنشاء نسخ منهم في المكان الذي نحتاجهم فيه‪.‬‬
‫و بذلك نكون جمعنا كل الكالسات التي كتبت بشكل منفصل و ربطناهم مع بعضهم و كأننا كتبناهم في كالس واحد فقط‪.‬‬
‫مالحظة‪ :‬الكائن هو نسخة من الكالس و ليس نسخة من الملف الذي يحتوي على الكالس‪.‬‬
‫كما أن الكالس األساسي يتم إنشائه بدون إعطاء قيم لمتغيراته و سنرى في دروس الحقة كيف أننا نغير قيم‬
‫الكائنات و ليس قيم الكالس األصلي مباشرًة‪.‬‬
‫مفهوم الخصائص‬
‫كل كائن ننشئه من كالس معين يملك نسخة خاصة به من المتغيرات الموجودة في هذا الكالس‪ .‬المتغيرات التي يتم إعطاء‬
‫نسخة منها لكل كائن من الكالس هي ما تسمى بالخصائص‪ ,‬مثال‪:‬‬
‫إذا كان عندنا كالس إسمه ‪ Harmash‬يحتوي على متغيرين ‪ x‬و ‪ ,y‬و أنشأنا منه كائنين‪ ,‬الكائن األول إسمه ‪ A‬و الثاني‬
‫إسمه ‪.B‬‬
‫هنا سيكون كل كائن يحتوي نسخة خاصة من األشياء الموجودة في الكالس ‪.Harmash‬‬
‫سيملك الكائن ‪ A‬نسخة خاصة به من المتغيرين ‪ x‬و ‪ y‬ال عالقة للكائن ‪ B‬فيها‪.‬‬
‫و سيملك الكائن ‪ B‬نسخة خاصة به من المتغيرين ‪ x‬و ‪ y‬ال عالقة للكائن ‪ A‬فيها‪.‬‬
‫مفهوم الدوال‬

‫الدالة ( أو الميثود ) عبارة عن كود جاهز يتنفذ فقط عندما تقوم بإستدعائه‬

‫)(‪public void welcome‬‬


‫{‬
‫;)"‪System.out.print("welcome to www.harmash.com‬‬
‫}‬

‫مالحظة‪ :‬في البرامج الحقيقية ال يتم تعريف جميع الدوال في الكالس األساسي في المشروع و‬
‫الذي يسمى ‪ .Main Class‬بل يتم تعريفهم في كالس ثاني أو أكثر من كالس و عند الحاجة‬
‫يتم إستدعاءهم‪.‬‬
‫مبادئ كتابة الكود في جافا‬

‫‪Case Sensitivity‬‬
‫‪ Case Sensitivity‬تعني أن لغة البرمجة تميز بين األحرف الكبيرة و األحرف الصغيرة‪.‬‬
‫جافا تعامل األسماء التي نستخدمها بتأني سواء للمتغيرات‪ ,‬الدوال‪ ,‬الكالسات‪ ,‬الكائنات إلخ‪.‬‬
‫مثال‪ note :‬و ‪ Note‬ليسوا شيئًا واحدًا‪.‬‬
‫بينما في لغات برمجة أخرى مثل ‪ HTML‬ال يهم إذا كانت األحرف كبيرة أو صغيرة‪.‬‬
‫مثال‪ note :‬و ‪ Note‬و ‪ NoTe‬و ‪ NOTE‬هم شيئًا واحدًا‪.‬‬
‫إسم الكالس‬
‫دائمًا إبدأ إسم الكالس بحرف كبير‪.‬‬
‫مثال‪.class First :‬‬
‫إذا كان إسم الكالس يتألف من أكثر من كلمة‪ ,‬إجعل أول حرف من كل كلمة كبيرًا‪.‬‬
‫مثال‪.class FirstJavaClass :‬‬
‫إسم الدالة‬
‫دائمًا إبدأ إسم الدالة بحرف صغير‪.‬‬
‫مثال‪.)(public void display :‬‬
‫و إذا كان إسم الدالة يتألف من أكثر من كلمة‪ ,‬إجعل أول كلمة تبدأ بحرف صغير و جميع الكلمات التي تليها‬
‫تبدأ بحرف كبير‪.‬‬
‫مثال‪.)(public void displayUserInfo :‬‬

‫قواعد إلزامية عند إعطاء األسماء‬


‫جميع الـ ‪ Identifiers‬يجب أن يبدأوا بحرف كبير بين ‪ A-Z‬أو حرف صغير بين ‪ a-z‬أو رمز الدوالر ‪ $‬أو‬
‫الشرطة _‪.‬‬
‫يمنع بدء الـ ‪ Identifiers‬برقم‪.‬‬
‫يمنع استخدام الـ ‪ Literals‬أي القيم ‪ true, false‬و ‪.null‬‬
‫يمنع إستخدام أي كلمة من الكلمات المحجوزة ( ‪)keywords‬‬
‫ال تنسى أن جافا تطبق مبدأ الـ ‪Case Sensitive‬‬
‫األحرف المستخدمة في وضع األسماء في جافا‬
.‫ في البرمجة‬identifier ‫ يسمى‬..‫ كائن إلخ‬,‫ كالس‬,‫ دالة‬,‫أي إسم نضعه لمتغير‬
.‫ له‬identifier ‫ أي علينا تحديد الـ‬,‫في جافا كل عنصر نريد خلقه علينا إعطاءه إسم خاص‬
.Identifiers ‫ أي من خالل الـ‬,‫إذًا يتم التمييز بين العناصر في جافا من خالل أسمائهم‬

‫ركز على أول حرف فقط‬


Harmash , name , $money , _number :‫أمثلة لألسماء التي يسمح باستخدامها‬
1st , -cash , @user :‫أمثلة لألسماء التي يمنع استخدامها‬
‫الكلمات المحجوزة في جافا‬
Identifiers ‫ أي ال يمكن إستخدامها كـ‬,‫جميع الكلمات التالية محجوزة للغة جافا‬

abstract continue for new switch


assert default goto package synchronized
Boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
‫انشاء أول برنامج في جافا‬
‫سنقوم اآلن بإنشاء برنامج بسيط مهمته فقط طباعة الجملة ‪.Welcome to java world‬‬
‫في المثال التالي قمنا بتسمية البرنامج ‪ Main‬و إستخدمنا األمر ‪ )(System.out.println‬لطباعة الجملة التي نريد‬
‫عرضها‪.‬‬

‫{ ‪public class Main‬‬


‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بعرض الجملة ‪//‬‬
‫;)"‪System.out.println("Welcome to java world‬‬
‫}‬
‫}‬

‫النتيجة‬

‫‪Welcome to java world‬‬


‫مفهوم الـ ‪Concatenation‬‬
‫‪ Concatenation‬تعني سلسلة باللغة العربية‪ .‬برمجيًا تعني دمج عدة أشياء مع بعضها سواء كانت نصوص أو أرقام و‬
‫جعلها تبدو شيئًا واحدًا‪.‬‬
‫هنا قمنا بإنشاء برنامج يحتوي على أمر طباعة واحد‪ ,‬في هذا األمر قمنا بدمج ثالث كلمات و رقم‪ ,‬و عرضناهم مع‬
‫بعضها كجملة واحدة‪.‬‬

‫{ ‪public class Main‬‬


‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بدمج ثالث كلمات و رقم‪ ,‬و عرضناهم مع بعضهم كجملة واحدة ‪//‬‬
‫;)‪System.out.println("Welcome " + "to " + "java " + 101‬‬
‫}‬
‫}‬

‫النتيجة‬

‫‪Welcome to java 101‬‬


‫دوال العرض‬
‫في جافا يوجد ثالث دوال يمكنك استخدامهم للطباعة‪ ,‬ذكرناهم في الجدول التالي‪.‬‬
‫الدالة مع تعريفها‬

‫‪1‬‬ ‫دالة تستخدم لعرض أي شيء نضعه في داخلها)(‪System.out.print‬‬


‫‪.‬سواء نص‪ ,‬رقم أو قيمة متغير‬

‫تستخدم أيضًا لعرض أي شيء نضعه في)(‪System.out.println‬‬


‫‪2‬‬ ‫داخلها سواء نص‪ ,‬رقم أو قيمة متغير‪.‬‬
‫الفرق بينها و بين الدالة السابقة أنها تعرض أي شيء نطبعه بعدها على سطر‬
‫‪.‬جديد‬

‫تستخدم أيضًا لعرض أي شيء نضعه في)(‪System.out.printf‬‬


‫داخلها سواء نص‪ ,‬رقم أو قيمة متغير‪.‬‬
‫فكرة هذه الدالة تختلف عن الدالتين السابقتين‪ ,‬و استخدامها مختلف أيضًا‪ .‬تم‬
‫بطريقة مختلفة فقط‪ Concatenation .‬تصميمها لتحقيق مبدأ الـ‬
‫هنا كل شيء تريد عرضه عليك حجز مكان له‪.‬‬
‫‪3‬‬ ‫لتحجز مكان له ‪ %d‬إستخدم الرمز ‪ int,‬عند عرض عدد صحيح‪ ,‬أي نوعه‬
‫في دالة العرض‪.‬‬
‫لتحجز ‪ %f‬إستخدم الرمز ‪ float,‬عند عرض عدد بفاصلة عشرية‪ ,‬أي نوعه‬
‫مكان له في دالة العرض‪.‬‬
‫لتحجز مكان له في دالة ‪ %s‬إستخدم الرمز ‪ String,‬عند عرض نص عادي‬
‫‪.‬العرض‬
‫أمثلة شاملة حول دوال العرض‬
.)(print ‫في المثال التالي قمنا بعرض ثالث أشياء باستخدام الدالة‬
public class Main {
public static void main(String[] args) {
// ‫هنا قمنا بعرض نص‬
System.out.print("Welcome to java world");
// ‫هنا قمنا بعرض رقم‬
System.out.print(1000);
// ‫ بعدها قمنا بعرض قيمته‬x ‫هنا قمنا بتعريف متغير إسمه‬
int x = 123;
System.out.print(x);
}
}
public class Main {
public static void main(String[] args) {
// ‫هنا قمنا بعرض نص‬
System.out.println("Welcome to java world");
// ‫هنا قمنا بعرض رقم‬
System.out.println(1000);
// ‫ بعدها قمنا بعرض قيمته‬x ‫هنا قمنا بتعريف متغير إسمه‬
int x = 123;
System.out.println(x);
}
}
‫{ ‪public class Main‬‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف متغير إسمه ‪ x‬قيمته ‪// 10‬‬
‫;‪int x = 10‬‬
‫مكان الـ ‪ %d‬بعدها سيتم عرض كامل محتوى دالة الطباعة ‪//‬‬
‫هنا سيتم وضع قيمة المتغير ‪x‬‬
‫;)‪System.out.printf("The value of x is: %d", x‬‬
‫}‬
‫}‬

‫{ ‪public class Main‬‬


‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف متغير إسمه ‪ x‬قيمته ‪// 10‬‬
‫;‪int x = 10‬‬
‫هنا قمنا بتعريف متغير إسمه ‪ y‬قيمته ‪// 10.55‬‬
‫;‪float y = 10.55f‬‬
‫مكان الـ ‪ %f‬بعدها سيتم عرض كامل محتوى دالة الطباعة ‪//‬‬
‫هنا سيتم وضع قيمة المتغير ‪ x‬مكان الـ ‪ %d‬و قيمة المتغير ‪y‬‬
‫;)‪System.out.printf("x = %d and y = %f", x, y‬‬
‫}‬
‫}‬
‫مفهوم المتغيرات‬
‫متغير‪ :‬تعني ‪ variable‬في اللغة اإلنجليزية‪ ,‬اآلن نريدك أن تفهم المتغيرات على أنها فقط أماكن يتم حجزها في‬
‫الذاكرة لتخزين بيانات أثناء تشغيل البرنامج‪.‬‬
‫النوع الذي نعطيه للمتغير يجعل نظام التشغيل يحدد نوع البيانات الذي يمكن تخزينه في المساحة المحجوزة لهذا‬
‫المتغير في الذاكرة‬
‫البيانات في جافا نوعين‪:‬‬
‫‪ Primitive Data Types‬و تعني أنواع البيانات البدائية‪.‬‬
‫‪ Reference/Object Data Types‬و تعني أنواع البيانات المرجعية‪.‬‬
‫أنواع البيانات البدائية‬
‫هناك ثمانية أنواع بدائية في جافا و هي‪:‬‬
‫‪.byte - short - int - long - float - double - boolean - char‬‬
‫النوع ‪byte‬‬
‫هذا النوع يمثل عدد صحيح يتألف من ‪.bit 8‬‬
‫أقل قيمة يمكن تخزينها فيه هي ‪ 7^2-‬و هذا يساوي ‪.128-‬‬
‫أكثر قيمة يمكن تخزينها فيه هي ‪ 1 - 7^2‬و هذا يساوي ‪.127+‬‬
‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ 0‬كقيمة إفتراضية‪.‬‬
‫النوع ‪ byte‬يستخدم لتخزين عدد صغير الحجم ال يحتوي على فاصلة عشرية‪ ,‬أي لتخزين عدد صحيح‪.‬‬
‫مثال‬
‫;‪byte a = 123‬‬
‫;‪byte b = -70‬‬
‫النوع ‪short‬‬
‫هذا النوع يمثل عدد صحيح يتألف من ‪.bit 16‬‬
‫أقل قيمة يمكن تخزينها فيه هي ‪ 15^2-‬و هذا يساوي ‪.32,768-‬‬
‫أكثر قيمة يمكن تخزينها فيه هي‪ 1 - 15^2‬و هذا يساوي ‪.32,767+‬‬
‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ 0‬كقيمة إفتراضية‪.‬‬
‫النوع ‪ short‬يستخدم لتخزين عدد متوسط الحجم ال يحتوي على فاصلة عشرية‪ ,‬أي لتخزين عدد صحيح‪.‬‬

‫;‪short a = 12345‬‬
‫;‪short b = -7000‬‬

‫النوع ‪int‬‬
‫هذا النوع يمثل عدد صحيح يتألف من ‪.bit 32‬‬
‫أقل قيمة يمكن تخزينها فيه هي ‪ 31^2-‬و هذا يساوي ‪.2,147,483,647-‬‬
‫أكثر قيمة يمكن تخزينها فيه هي ‪ 1 - 31^2‬و هذا يساوي ‪.2,147,483,646+‬‬
‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ 0‬كقيمة إفتراضية‪.‬‬
‫النوع ‪ int‬يستخدم لتخزين عدد كبير ال يحتوي على فاصلة عشرية‪ ,‬أي لتخزين عدد صحيح‪.‬‬

‫;‪int a = 1234567‬‬
‫;‪int b = -700000‬‬
‫النوع ‪long‬‬
‫هذا النوع يمثل عدد صحيح يتألف من ‪.bit 64‬‬
‫أقل قيمة يمكن تخزينها فيه هي ‪ 63^2-‬و هذا يعني ‪.9,223,372,036,854,775,808-‬‬
‫أكثر قيمة يمكن تخزينها فيه هي ‪ 1 - 63^2‬و هذا يعني ‪.9,223,372,036,854,775,807+‬‬
‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ 0L‬كقيمة إفتراضية‪.‬‬
‫النوع ‪ long‬يستخدم لتخزين عدد كبير جدًا ال يحتوي على فاصلة عشرية‪ ,‬أي لتخزين عدد صحيح حجمه كبير جدًا‪.‬‬

‫;‪long a = 1234567L‬‬
‫;‪long b = -700000L‬‬
‫النوع ‪float‬‬
‫هذا النوع يمثل عدد بفاصلة عشرية يتألف من ‪.bit 32‬‬
‫أقل و أكبر قيمة يمكن تخزينها فيه تحدد بنظام ( ‪ single-precision 32-bit IEEE 754 floating point‬إذا لم‬
‫نضع أي قيمة‪ ,‬توضع القيمة ‪ 0.0f‬كقيمة إفتراضية‪.‬‬
‫النوع ‪ float‬يستخدم لتخزين عدد كبير بفاصلة عشرية‪.‬‬
‫;‪float a = 12.05f‬‬
‫;‪float b = -8.123f‬‬
‫النوع ‪double‬‬
‫هذا النوع يمثل عدد بفاصلة عشرية يتألف من ‪.bit 64‬‬
‫أقل و أكبر قيمة يمكن تخزينها فيه تحدد بنظام ( ‪double-precision 64-bit IEEE 754 floating point‬‬
‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ 0.0d‬كقيمة إفتراضية‪.‬‬
‫;‪double a = 50.98794d‬‬ ‫النوع ‪ double‬يستخدم لتخزين عدد كبير جدًا بفاصلة عشرية‪.‬‬
‫;‪double b = -100.1d‬‬
‫النوع ‪boolean‬‬
‫هذا النوع يمثل معلومة تتألف من ‪.bit 1‬‬
‫يستطيع أن يحتوي إما على القيمة ‪ true‬أو على القيمة ‪.false‬‬
‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ false‬كقيمة إفتراضية‪.‬‬
‫النوع ‪ boolean‬يستخدم في الشروط‬
‫;‪boolean check = true‬‬
‫;‪boolean found = false‬‬
‫النوع ‪char‬‬
‫هذا النوع يمثل معلومة تتألف من ‪.bit 16‬‬
‫أقل قيمة يمكن تخزينها فيه هي ‪.0‬‬
‫أكثر قيمة يمكن تخزينها فيه هي ‪.65,535‬‬
‫و يستطيع أن يحتوي على أي حرف أو رمز كقيمة‪.‬‬
‫إذا لم نضع أي قيمة‪ ,‬يوضع اليونيكود '\‪ 'u0000‬كقيمة إفتراضية‪ .‬و هذا اليونيكود يمثل أصغر قيمة يمكن وضعها في‬
‫النوع ‪.char‬‬
‫;‪char a = 0‬‬
‫النوع ‪ char‬يستخدم لتخزين حرف واحد‪ ,‬و يستخدم في الشروط‪.‬‬
‫;‪char b = 1234‬‬
‫;'‪char letterA = 'A‬‬
‫أنواع البيانات المرجعية‬
‫;"‪String website = "www.harmash.com‬‬ ‫أي نوع أصله كائن من كالس يعتبر من البيانات المرجعية‪.‬‬
‫;]‪String[] names = new String[10‬‬ ‫أي نوع نضع الكلمة ‪ new‬عندما نقوم بتعريفه‪ ,‬يعتبر من البيانات المرجعية‪.‬‬
‫;]‪int[] numbers = new int[100‬‬ ‫جميع أنواع المصفوفات في جافا تعتبر من البيانات المرجعية‪.‬‬
‫;]‪float[] notes = new float[5‬‬ ‫إذا لم نضع أي قيمة‪ ,‬توضع القيمة ‪ null‬كقيمة إفتراضية‪ ,‬و التي تعني فارغ‪.‬‬
‫;]‪char[] alphabets = new char[26‬‬
‫;)‪Scanner input = new Scanner(System.in‬‬
‫أساليب تعريف المتغيرات‬
‫في البداية أنواع المتغيرات هي نفسها أنواع البيانات البدائية التي ذكرناها في الدرس السابق و هي‪:‬‬
‫‪.byte - short - int - long - float - double - boolean - char‬‬
‫اآلن‪ ,‬من خالل األمثلة سنعلمك عدة أساليب يمكنك إتباعها لتعريف المتغيرات و تصغير حجم الكود‪.‬‬

‫في حال كنت تريد تعريف عدة متغيرات من نفس النوع بدون قيم‪.‬‬
‫;‪int a‬‬
‫;‪int b‬‬
‫;‪int c‬‬
‫•تستطيع تعريفهم هكذا‪.‬‬
‫;‪int a, b, c‬‬
‫المثال الثاني‬
‫•في حال كنت تريد تعريف عدة متغيرات من نفس النوع و إعطائهم قيم مباشرًة عند إنشائهم‪.‬‬
‫;‪int a = 10‬‬
‫;‪int b = 20‬‬
‫;‪int c = 30‬‬
‫•تستطيع تعريفهم هكذا‪.‬‬
‫;‪int a=10, b=20, c=30‬‬
‫المثال الثالث‬
‫•في حال كنت تريد تعريف عدة متغيرات من نفس النوع و لكن طبيعتهم مختلفة و بدون قيم‪.‬‬
‫;‪int a‬‬
‫;][‪int b‬‬
‫;][][‪int c‬‬
‫•تستطيع تعريفهم هكذا‪.‬‬
‫;][][‪int a, b[], c‬‬
‫المثال الرابع‬
‫•تستطيع تعريف المصفوفة بعدة طرق كالتالي‪.‬‬
‫•الطريقة األولى‬
‫;‪int[] a‬‬
‫•الطريقة الثانية‬
‫;‪int []a‬‬
‫•الطريقة الثالثة‬
‫;][‪int a‬‬

‫• الشيء الذي علينا اإلنتباه له هو أنك إذا كنت تريد تعريف مصفوفة و متغير من نفس النوع ‪,‬ال تستخدم الطريقة األولى‪.‬‬
‫•السبب أنك إذا كتبت ‪ ][int‬سيتم إعتبار كل إسم تضعه بعد الفاصلة يمثل مصفوفة و ليس متغير عادي‪.‬‬
‫;‪int[] a, b, c‬‬
‫•إذًا هنا ‪ a‬و ‪ b‬و ‪ c‬جميعهم يمثلون مصفوفات ذات بعد واحد‪.‬‬
‫مالحظات مهمة حول المتغيرات‬
‫ركز جيدًا على المفاهيم التالية لكي تعرف كيف تصلح األخطاء التي قد تتعرض لها عند كتابة الكود‪.‬‬
‫عملية تعريف متغير بدون إعطائه قيمة تسمى ‪.Declaration‬‬
‫عملية إعطاء قيمة لمتغير تم إنشاؤه سابقًا تسمى ‪.Assigning‬‬
‫عملية تعريف متغير و إعطائه قيمة مباشرًة عند إنشائه تسمى ‪.Initialisation‬‬

‫أمثلة‬
‫•هنا سنفعل ‪ Declare‬لمتغير جديد‪ ,‬أي سنقوم بتعريف متغير جديد بدون إعطائه قيمة أولية‪.‬‬
‫;‪int a‬‬
‫•هنا سنفعل ‪ Assign‬لمتغير‪ ,‬أي سنقوم بإعطاء قيمة لمتغير كان في األصل موجودًا‪.‬‬
‫;‪a = 10‬‬
‫•هنا سنفعل ‪ Initialise‬لمتغير جديد‪ ,‬أي سنقوم بإنشاء متغير جديد و إعطائه قيمة أولية‪.‬‬
‫;‪double Sum = 0‬‬
‫مفهوم الدوال‬
‫دالة‪ :‬تعني ‪ Method‬او ‪ Function‬في اللغة اإلنجليزية‪ ,‬و هي عبارة عن مجموعة أوامر مجمعة في مكان‬
‫واحد و تتنفذ عندما نقوم باستدعائها‪.‬‬
‫كما أن جافا تحتوي على مجموعة كبيرة جدًا من الدوال الجاهزة التي يمكنك إستعمالها مباشرًة و التي سنتعرف‬
‫إليها في دروس الحقة‪.‬‬

‫أمثلة حول الدوال الجاهزة‬


‫دوال الطباعة هي من الدوال الجاهزة في لغة جافا‪.‬‬
‫;)(‪System.out.print‬‬
‫;)(‪System.out.println‬‬
‫;)(‪System.out.printf‬‬
‫بناء الدوال‬
‫عند تعريف أي دالة في جافا عليك إتباع الشكل التالي‪:‬‬
‫{)‪modifier returnType methodName(Parameters List‬‬
‫‪// Method Body‬‬
‫}‬
‫‪.‬يحدد طريقة الوصول للدالة‪ ,‬ستفهم معنى هذه الكلمة في دروس الحقة ‪modifier:‬‬
‫‪.‬يحدد النوع الذي سترجعه الدالة عندما تنتهي أو إذا كانت لن ترجع أي قيمة ‪• returnType:‬‬
‫‪.‬يمثل اإلسم الذي نعطيه للدالة‪ ,‬و الذي من خالله يمكننا استدعاءها ‪• methodName:‬‬
‫‪.‬المقصود بها الباراميترات ( وضع الباراميترات إختياري ) ‪• Parameters List:‬‬
‫‪.‬تعني جسم الدالة‪ ,‬و المقصود بها األوامر التي نضعها في الدالة ‪• Method Body:‬‬
‫الـ ‪ returnType‬في الدالة يمكن أن يكون أي نوع من أنواع البيانات الموجودة في‬
‫جافا (‪ int, double, boolean, String‬إلخ‪.) ..‬‬
‫و يمكن وضع إسم لكالس معين‪ ,‬و هنا يكون القصد أن الدالة ترجع كائن من هذا الكالس (ال تقلق ستتعلم هذا في‬
‫دروس الحقة )‪.‬‬
‫في حال كانت الدالة ال ترجع أي قيمة‪ ,‬يجب وضع الكلمة ‪ void‬مكان الكلمة ‪returnType‬‬

‫امثلة حول تعريف دوال جديدة‬


‫في المثال التالي قمنا بتعريف دالة إسمها ‪ ,welcomeMessage‬نوعها ‪ ,void‬و تحتوي على أمر طباعة فقط‪.‬‬
‫بعدها قمنا باستدعائها في الدالة ‪ )(main‬حتى يتم تنفيذ أمر الطباعة الموضوعة فيها‪.‬‬
‫{ ‪public class Main‬‬
‫عند إستدعاءها تطبع جملة ‪//‬‬
‫هنا قمنا بتعريف دالة إسمها ‪ .welcomeMessage‬للترحيب‬
‫{ )(‪public static void welcomeMessage‬‬
‫‪System.out.println("Welcome to‬‬
‫;)"‪harmash.com‬‬
‫}‬
‫{ )‪public static void main(String[] args‬‬
‫لطباعة جملة الترحيب الموضوعة فيها ‪//‬‬
‫هنا قمنا باستدعاء الدالة ‪welcomeMessage‬‬
‫;)(‪welcomeMessage‬‬
‫}‬
‫}‬
‫{ ‪public class Main‬‬
‫عند إستدعاءها نعطيها عددين فترجع ناتج جمع هذين ‪//‬‬
‫هنا قمنا بتعريف دالة إسمها ‪ sum‬العددين‬
‫{ )‪public static int sum(int a, int b‬‬
‫;‪return a+b‬‬
‫}‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا باستدعاء ‪ sum‬لحساب ناتج جمع العددين ‪ 5‬و ‪// 10‬‬
‫الدالة‬
‫;) )‪System.out.println( "5 + 10 = " + sum(10, 5‬‬
‫}‬
‫}‬
‫مفهوم العوامل‬
‫عامل‪ :‬تعني ‪ operator‬في اللغة اإلنجليزية‪ ,‬و العامل عبارة عن رمز له معنى محدد في جافا‪.‬‬
‫يمكننا تصنيف العوامل في جافا إلى ‪ 5‬مجموعات أساسية و هي‪:‬‬
‫‪Arithmetic Operators‬‬
‫‪Comparison Operators‬‬
‫‪Logical Operators‬‬
‫‪Bitwise Operators‬‬
‫‪Assignment Operators‬‬

‫هناك أيضًا عوامل أخرى‪ ,‬سنراها في آخر الدرس‪.‬‬


‫العوامل التي تستخدم في العمليات الحسابية (‪)Arithmetic Operators‬‬
‫إسم العامل‬ ‫رمزه‬ ‫مثال‬ ‫شرح الكود‬

‫‪Assignment‬‬ ‫=‬ ‫‪a=b‬‬ ‫أعطي ‪ a‬قيمة ‪b‬‬

‫‪Addition‬‬ ‫‪+‬‬ ‫‪a+b‬‬ ‫أضف قيمة ‪ b‬على قيمة ‪a‬‬

‫‪Subtraction‬‬ ‫‪-‬‬ ‫‪a-b‬‬ ‫إطرح قيمة ‪ b‬من قيمة ‪a‬‬

‫‪Unary plus‬‬ ‫‪+‬‬ ‫‪+a‬‬ ‫أضرب قيمة ‪ a‬بالعامل ‪+‬‬

‫‪Unary minus‬‬ ‫‪-‬‬ ‫‪-a‬‬ ‫أضرب قيمة ‪ a‬بالعامل ‪-‬‬

‫‪Multiplication‬‬ ‫*‬ ‫‪a*b‬‬ ‫أضرب قيمة ‪ a‬بقيمة ‪b‬‬

‫‪Division‬‬ ‫‪/‬‬ ‫‪a/b‬‬ ‫أقسم قيمة ‪ a‬على قيمة ‪b‬‬

‫للحصول على آخر رقم يبقى‬


‫‪Modulo‬‬ ‫‪%‬‬ ‫‪a%b‬‬ ‫عندما نقسم قيمة ‪ a‬على قيمة ‪b‬‬

‫إلضافة ‪ 1‬على قيمة ‪ a‬و تستخدم‬


‫‪Increment‬‬ ‫‪++‬‬ ‫‪a++‬‬ ‫في الحلقات‬

‫إلنقاص ‪ 1‬من قيمة ‪ a‬و تستخدم‬


‫‪Decrement‬‬ ‫‪--‬‬ ‫‪a--‬‬ ‫في الحلقات‬
‫العوامل التي تستخدم في المقارنات (‪)Comparison Operators‬‬

‫إسم العامل‬ ‫رمزه‬ ‫مثال‬ ‫شرح الكود‬

‫هل قيمة ‪ a‬تساوي قيمة ‪ b‬؟‬


‫‪Equal to‬‬ ‫==‬ ‫)‪(a == b‬‬
‫إذا كان الجواب نعم فإنها ترجع ‪true‬‬

‫هل قيمة ‪ a‬ال تساوي قيمة ‪ b‬؟‬


‫‪Not equal to‬‬ ‫=!‬ ‫)‪(a != b‬‬
‫إذا كان الجواب نعم فإنها ترجع ‪true‬‬

‫هل قيمة ‪ a‬أكبر من قيمة ‪ b‬؟‬


‫‪Greater than‬‬ ‫>‬ ‫)‪(a > b‬‬
‫إذا كان الجواب نعم فإنها ترجع ‪true‬‬

‫هل قيمة ‪ a‬أصغر من قيمة ‪ b‬؟‬


‫‪Less than‬‬ ‫<‬ ‫)‪(a < b‬‬
‫إذا كان الجواب نعم فإنها ترجع ‪true‬‬

‫‪Greater than‬‬ ‫هل قيمة ‪ a‬أكبر أو تساوي قيمة ‪ b‬؟‬


‫=>‬ ‫)‪(a >= b‬‬
‫‪or Equal to‬‬ ‫إذا كان الجواب نعم فإنها ترجع ‪true‬‬

‫‪Less than‬‬ ‫هل قيمة ‪ a‬أصغر أو تساوي قيمة ‪ b‬؟‬


‫=<‬ ‫)‪(a <= b‬‬
‫‪or Equal to‬‬ ‫إذا كان الجواب نعم فإنها ترجع ‪true‬‬
‫العوامل التي تستخدم في وضع شروط منطقية (‪)Logical Operators‬‬

‫إسم العامل‬ ‫رمزه‬ ‫مثال‬ ‫شرح الكود‬

‫هل قيمة ‪ a‬و ‪ b‬تساويان ‪ true‬؟‬


‫‪AND‬‬ ‫&&‬ ‫)‪(a && b‬‬ ‫هنا يجب أن يتم تحقيق الشرطين‬
‫ليرجع ‪true‬‬

‫هل قيمة ‪ a‬أو ‪ b‬أو كالهما‬


‫تساويان ‪ true‬؟‬
‫‪OR‬‬ ‫||‬ ‫)‪(a || b‬‬ ‫هنا يكفي أن يتم تحقيق شرط‬
‫واحد من الشرطين ليرجع ‪true‬‬

‫هل قيمة ‪ a‬ال تساوي ‪ true‬؟‬


‫‪NOT‬‬ ‫!‬ ‫‪!a‬‬ ‫إذا كان الجواب نعم فإنها‬
‫ترجع ‪true‬‬
‫العوامل التي تستخدم للتعامل مع الـ )‪bits (Bitwise Operators‬‬

‫إسم العامل‬ ‫رمزه‬ ‫مثال‬ ‫شرح الكود‬

‫‪Bitwise AND‬‬ ‫&‬ ‫‪a&b‬‬ ‫‪ b‬و ‪ a‬المشتركة بين ‪ bits‬العامل & يحسب ناتج جمع الـ‬

‫المشتركة و الغير مشتركة ‪ bits‬العامل | يحسب ناتج جمع الـ‬


‫‪Bitwise OR‬‬ ‫|‬ ‫‪a | b+‬‬
‫‪ b‬و ‪ a‬بين‬

‫‪Bitwise XOR‬‬ ‫^‬ ‫‪a^b‬‬ ‫‪ b‬و ‪ a‬الغير مشتركة بين ‪ bits‬العامل ^ يحسب ناتج جمع الـ‬

‫التي ‪ bits‬التي تساوي ‪ 0‬إلى ‪ 1‬و يقلب الـ ‪ bits‬العامل ~ يقلب الـ‬
‫تساوي ‪ 1‬إلى ‪,0‬‬
‫‪Bitwise compliment OR‬‬ ‫~‬ ‫‪~a‬‬
‫ثم يضيف عليهم ‪ 1‬و يحسب ناتج جمعهم‪ ,‬بعدها يضرب الجواب‬
‫‪.‬بالعامل ( ‪ ) -‬ثم يعطينا جواب سلبي‬

‫من آخر اليسار إلى أول اليمين‪ bits .‬العامل << يزيح الـ‬
‫‪Left shift‬‬ ‫<<‬ ‫‪a << 2‬‬
‫‪.‬و نضعهم في األول ‪ bits‬العدد ‪ 2‬يعني أننا سنزيح آخر إثنين‬

‫من أول اليمين إلى آخر اليسار‪ bits .‬العامل >> يزيح الـ‬
‫‪Right shift‬‬ ‫>>‬ ‫‪a >> 2‬‬
‫‪.‬و نضعهم في األخير ‪ bits‬العدد ‪ 2‬يعني أننا سنزيح أول إثنين‬

‫من أول اليمين ثم يبدلهم بأصفار و يضعهم ‪ bits‬العامل >>> يزيح الـ‬
‫في آخر اليسار‪.‬‬
‫‪Zero fill right shift‬‬ ‫>>>‬ ‫‪a >>> 2‬‬
‫و نضع بدالهم صفرين في ‪ bits‬العدد ‪ 2‬يعني أننا سنمسح أول إثنين‬
‫‪.‬األخير‬
‫العوامل التي تستخدم إلعطاء قيم للمتغيرات (‪)Assignment Operators‬‬
‫إسم العامل‬ ‫رمزه‬ ‫مثال‬ ‫شرح الكود‬

‫‪Basic Assignment‬‬ ‫=‬ ‫‪a=b‬‬ ‫ضع قيمة ‪ b‬في ‪.a‬‬

‫‪Add AND Assignment‬‬ ‫‪=+‬‬ ‫‪a += b‬‬ ‫أضف قيمة ‪ a‬على قيمة ‪ b‬و خزن الناتج في ‪a‬‬

‫‪Susbtract AND Assignment‬‬ ‫‪=-‬‬ ‫‪a -= b‬‬ ‫أنقص قيمة ‪ a‬من قيمة ‪ b‬و خزن الناتج في ‪a‬‬

‫‪Multiply AND Assignment‬‬ ‫*=‬ ‫‪a *= b‬‬ ‫أضرب قيمة ‪ a‬بقيمة ‪ b‬و خزن الناتج في ‪a‬‬

‫‪Divide AND Assignment‬‬ ‫‪=/‬‬ ‫‪a /= b‬‬ ‫أقسم قيمة ‪ a‬على قيمة ‪ b‬و خزن الناتج في ‪a‬‬

‫‪Modulo AND Assignment‬‬ ‫‪=%‬‬ ‫‪a %= b‬‬ ‫أقسم قيمة ‪ a‬على قيمة ‪ b‬و خزن آخر رقم يبقى من عملية القسمة في ‪a‬‬

‫‪Left shift AND Assignment‬‬ ‫<<=‬ ‫‪a <<= 2‬‬ ‫أزح آخر إثنين ‪ bits‬و ضعهم في األول ثم خزن الناتج في ‪a‬‬

‫‪Right shift AND Assignment‬‬ ‫>>=‬ ‫‪a >>= 2‬‬ ‫أزح أول اثنين ‪ bits‬و ضعهم في اآلخر ثم خزن الناتج في ‪a‬‬

‫‪Bitwise AND Assignment‬‬ ‫&=‬ ‫‪a &= b‬‬ ‫أحسب ناتج جمع الـ ‪ bits‬المشتركة بين ‪ a‬و ‪ b‬و خزن الناتج في ‪a‬‬

‫‪Bitwise exclusive OR and Assignment‬‬ ‫^=‬ ‫‪a ^= b‬‬ ‫أحسب ناتج جمع الـ ‪ bits‬الغير مشتركة بين ‪ a‬و ‪ b‬و خزن الناتج في ‪a‬‬

‫أحسب ناتج جمع الـ ‪ bits‬المشتركة و الغير مشتركة بين ‪ a‬و ‪ b‬و خزن‬
‫‪Bitwise inexclusive OR and Assignment‬‬ ‫|=‬ ‫‪a |= b‬‬
‫الناتج في ‪a‬‬
‫مفهوم الحلقات‬
‫حلقة‪ :‬تعني ‪ Loop‬في اللغة اإلنجليزية‪ .‬نستخدم الحلقات لعدم تكرار نفس الكود عدة مرات‪ ,‬إذًا أي كود نريده أن يتنفذ‬
‫عدة مرات‪ ,‬نقوم بكتابته داخل حلقة فتقوم هي بإعادة تنفيذ الكود قدر ما شئنا ضمن شروط معينة نقوم نحن بتحديدها‪.‬‬

‫طريقة تنفيذ األوامر و الحلقات في الذاكرة‬


‫األوامر في العادة تتنفذ بتسلسل وراء بعضها‪ ,‬و لكن الحلقات تجعل سهم تنفيذ األوامر يقف عندها فيقوم بتنفيذ األوامر‬
‫التي بداخلها عدة مرات‪ ,‬و بعد أن يخرج من الحلقة يعود و يكمل تنفيذ باقي األوامر التي تليها‪ ,‬كما في الصورة التالية ‪:‬‬

‫عندما تتنفذ الحلقة فإن األوامر الموضوعة فيها تنفذ بشكل منفصل عن باقي األوامر الموجودة في البرنامج‪ ,‬أي يمكنك‬
‫إعتبار أن جميع أوامر الحلقة توضع في مكان خاص في الذاكرة‪ ,‬هذا المكان يسمى ‪.scope‬‬
‫بعد أن تتنفذ جميع أوامر الحلقة في هذا الـ ‪ ,scope‬يتم مسح هذا الـ ‪ scope‬كليًا من الذاكرة و هذه العملية تسمى ‪.Destroy‬‬
‫أنواع الحلقات‬

‫تعريف الحلقة ‪for‬‬


‫نستخدم الحلقة ‪ for‬إذا كنا نريد تنفيذ الكود عدة مرات محددة‪ ,‬فمثًال إذا كنا نريد تنفيذ كود معين ‪ 10‬مرات‪ ,‬نضعه بداخل‬
‫حلقة تعيد نفسها ‪ 10‬دورات‪.‬‬

‫طريقة إستخدامها‬
‫) ‪ decrement‬أو ‪for( initialisation; condition; increment‬‬
‫{‬
‫‪// statements‬‬
‫}‬

‫{ ‪public class Main‬‬


‫{ )‪public static void main(String[] args‬‬
‫تتألف من ‪ 10‬دورات‪ .‬في كل دورة تطبع قيمة العداد ‪//‬‬
‫هنا قمنا بإنشاء حلقة ‪ for‬المستخدم فيها‬
‫) ‪for( int i=1; i<=10; i++‬‬
‫{‬
‫;) ‪System.out.println( i‬‬
‫}‬
‫}‬
‫}‬
‫تعريف الحلقة ‪while‬‬
‫نستخدم الحلقة ‪ while‬إذا كنا نريد تنفيذ الكود عدة مرات‪ ,‬ولكننا ال نعرف كم مرة بالتحديد ألننا نريد إيقاف التنفيذ إذا‬
‫تحقق شرط معين‪.‬‬
‫هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها‪.‬‬
‫هنا كأننا نقول‪ " :‬طالما أن الشرط لم يتحقق إستمر في تكرار الكود "‪.‬‬
‫طريقة إستخدامها‬
‫{ ‪public class Main‬‬
‫;‪initialisation‬‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف المتغير الذي استخدمناه كعداد في الحلقة ‪//‬‬
‫) ‪while( condition‬‬
‫;‪int i=1‬‬
‫{‬
‫تظل تنفذ األوامر الموضوعة فيها طالما أن قيمة العدد ال ‪//‬‬
‫‪// statements‬‬
‫هنا أنشأنا حلقة ‪ while‬تزال أصغر أو تساوي ‪10‬‬
‫) ‪while( i<=10‬‬
‫;‪ decrement‬أو ‪increment‬‬
‫{‬
‫}‬
‫في كل دورة سيتم طباعة قيمة العداد ثم إضافة ‪ 1‬عليها ‪//‬‬
‫;) ‪System.out.println( i‬‬
‫;‪i++‬‬
‫}‬
‫}‬
‫}‬
‫تعريف الحلقة ‪do while‬‬
‫نستخدم الحلقة ‪ do while‬إذا كنا نريد تنفيذ الكود عدة مرات‪ ,‬ولكننا ال نعرف كم مرة بالتحديد ألننا نريد إيقاف‬
‫التنفيذ إذا تحقق شرط معين‪.‬‬
‫هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها‪.‬‬
‫الفرق الوحيد بينها و بين الحلقة ‪ while‬أنها تتنفذ مرة واحدة على األقل ألنها تتأكد من الشرط بعد تنفيذ األوامر و‬
‫ليس قبلهم‪.‬‬
‫هنا كأننا نقول‪ " :‬طالما أن الشرط لم يتحقق إستمر في تكرار الكود "‪.‬‬
‫{ ‪public class Main‬‬ ‫طريقة إستخدامها‬
‫{ )‪public static void main(String[] args‬‬ ‫;‪initialisation‬‬
‫هنا قمنا بتعريف المتغير الذي استخدمناه كعداد في الحلقة ‪//‬‬
‫;‪int i=1‬‬ ‫{‪do‬‬
‫تظل تنفذ األوامر الموضوعة فيها طالما أن قيمة العدد ال ‪//‬‬ ‫‪// statements‬‬
‫هنا أنشأنا حلقة ‪ while‬تزال أصغر أو تساوي ‪10‬‬ ‫;‪ decrement‬أو ‪increment‬‬
‫‪do‬‬ ‫}‬
‫{‬ ‫‪While( condition‬‬
‫في كل دورة سيتم طباعة قيمة العداد ثم إضافة ‪ 1‬عليها ‪//‬‬
‫;) ‪System.out.println( i‬‬
‫;‪i++‬‬
‫}‬
‫;) ‪while( i<=10‬‬
‫}‬
‫}‬
‫مفهوم الشروط‬
‫شروط‪ :‬تعني ‪ conditions‬في اللغة اإلنجليزية‪ .‬و نستخدم الشروط لتحديد طريقة عمل البرنامج‪.‬‬
‫كما أنه يمكنك وضع العدد الذي تريده من الشروط في البرنامج الواحد‪ ,‬تستطيع وضع الشروط بداخل‬
‫جمل الشرط بشكل عام‬ ‫بعضها البعض أيضًا‪.‬‬
‫طريقة كتابتهم ‪: Syntax‬‬
‫) ‪if ( condition‬‬
‫{‬
‫إذا كان الشرط صحيحًا نفذ هذا الكود ‪//‬‬
‫}‬

‫) ‪else if ( condition‬‬
‫{‬
‫إذا كان الشرط صحيحًا نفذ هذا الكود ‪//‬‬
‫}‬

‫‪else‬‬
‫{‬
‫نفذ هذا الكود في حال لم يتم التعرف على الكود في أي ‪//‬‬
‫شرط‬
‫}‬
public class Main {
public static void main(String[] args) {
int S = 0;
if( S > 5 )
{
System.out.print("S is bigger than 5");
}
}
}

public class Main {


public static void main(String[] args) {
int S = 5;
if( S == 5 ) {
System.out.print("S is equal 5");
}
else {
System.out.print("S is not equal 5");
}
}
}
else if ‫جملة الشرط‬
.) ‫ تستخدم إذا كنت تريد وضع أكثر من إحتمال ( أي أكثر من شرط‬else if ‫جملة‬
else ‫ و‬if ‫ أي بين الجملتين‬,‫ يوضعون في الوسط‬else if ‫جملة أو جمل الـ‬
public class Main {
public static void main(String[] args) {
int number = 3;
if( number == 1 ) {
System.out.print("one");
}
else if( number == 2 ) {
System.out.print("two");
}
else if( number == 3 ) {
System.out.print("three");
}
else if( number >= 4 ) {
System.out.print("four or greater");
}
else {
System.out.print("negative number");
}
}
}
‫تعريف الجملة ‪switch‬‬
‫‪ switch‬نستخدمها إذا كنا نريد إختبار قيمة متغير معين مع الئحة من اإلحتماالت نقوم نحن بوضعها‪ ,‬و إذا‬
‫تساوت هذه القيمة مع أي إحتمال وضعناه ستتنفذ األوامر التي وضعناها في هذا اإلحتمال فقط‪.‬‬
‫كل إحتمال نضعه يسمى ‪.case‬‬
‫أنواع المتغيرات التي يمكن إختبار قيمتها باستخدام هذه الجملة هي‪:‬‬
‫‪.int - byte - short - char - String - enum‬‬

‫طريقة تعريفها‬
‫يمكننا تعريفها بعدة أشكال‪ ,‬الشكل األساسي هو التالي‪:‬‬
‫{ )‪switch(expression‬‬

‫‪case value:‬‬
‫‪// Statements‬‬
‫;‪break‬‬

‫‪case value:‬‬
‫‪// Statements‬‬
‫;‪break‬‬

‫‪default:‬‬
‫‪// Statements‬‬
‫;‪break‬‬

‫}‬
‫{ ‪public class Main‬‬
‫{ )‪public static void main(String[] args‬‬
‫;‪int x = 2‬‬
‫إختبر قيمة المتغير ‪switch( x ) { // x‬‬
‫في حال كانت تساوي ‪ 1‬سيتم تنفيذ أمر الطباعة ‪case 1: //‬‬
‫الموضوع فيها‬
‫;)"‪System.out.println("x contain 1‬‬
‫;‪break‬‬
‫في حال كانت تساوي ‪ 2‬سيتم تنفيذ أمر الطباعة ‪case 2: //‬‬
‫الموضوع فيها‬
‫;)"‪System.out.println("x contain 2‬‬
‫;‪break‬‬
‫في حال كانت تساوي ‪ 3‬سيتم تنفيذ أمر الطباعة ‪case 3: //‬‬
‫الموضوع فيها‬
‫;)"‪System.out.println("x contain 3‬‬
‫;‪break‬‬
‫في حال كانت ال تساوي أي قيمة من القيم ‪default: //‬‬
‫الموضوعة سيتم تنفيذ أمر الطباعة الموضوع فيها‬
‫‪System.out.println("x contain a different‬‬
‫;)"‪value‬‬
‫}‬
‫}‬
‫}‬
‫{ ‪public class Main‬‬
‫{ )‪public static void main(String[] args‬‬
‫;‪int x = 5‬‬
‫إختبر قيمة المتغير ‪switch( x ) { // x‬‬
‫في حال كانت تساوي ‪ 1‬سيتم تنفيذ أمر الطباعة ‪case 1: //‬‬
‫الموضوع فيها‬
‫;)"‪System.out.println("x contain 1‬‬
‫;‪break‬‬
‫في حال كانت تساوي ‪ 2‬سيتم تنفيذ أمر الطباعة ‪case 2: //‬‬
‫الموضوع فيها‬
‫;)"‪System.out.println("x contain 2‬‬
‫;‪break‬‬
‫في حال كانت تساوي ‪ 3‬سيتم تنفيذ أمر الطباعة ‪case 3: //‬‬
‫الموضوع فيها‬
‫;)"‪System.out.println("x contain 3‬‬
‫;‪break‬‬
‫في حال كانت ال تساوي أي قيمة من القيم ‪default: //‬‬
‫الموضوعة سيتم تنفيذ أمر الطباعة الموضوع فيها‬
‫‪System.out.println("x contain a different‬‬
‫;)"‪value‬‬
‫}‬
‫}‬
‫}‬
public class Main {
public static void main(String[] args) {
int x = 3;
switch( x ) { // x ‫إختبر قيمة المتغير‬
case 1: // ‫ سيتم تنفيذ أمر‬3 ‫ أو‬2 ‫ أو‬1 ‫في حال كانت تساوي‬
‫الطباعة‬
case 2:
case 3:
System.out.println("x contain 1 or 2 or 3");
break;
default: // ‫في حال كانت ال تساوي أي قيمة من القيم‬
‫الموضوعة سيتم تنفيذ أمر الطباعة الموضوع فيها‬
System.out.println("x contain a different
value");
}
}
}
‫الكالس ‪ Math‬هو كالس جاهز في جافا‪ ,‬يحتوي على دوال تتعلق بالرياضيات‪ ,‬ذكرنا بعضها في هذا الجدول‪.‬‬
‫إسم الدالة مع تعريفها‬

‫‪1‬‬ ‫)‪ public static double abs(double d‬ترجع القيمة المطلقة للعدد الذي نمرره لها مكان البارامتير ‪.d‬‬

‫‪2‬‬ ‫)‪ public static double ceil(double d‬ترجع العدد الصحيح األكبر أو الذي يساوي العدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪3‬‬ ‫)‪ public static double floor(double d‬ترجع العدد الصحيح األصغر أو الذي يساوي العدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪4‬‬ ‫)‪ public static double rint(double d‬ترجع أقرب عدد صحيح للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪5‬‬ ‫)‪ public static long round(double d‬ترجع أقرب عدد صحيح للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪6‬‬ ‫)‪ public static double max(double a, double b‬ترجع العدد األكبر بين العددين اللذين نمررهما لها مكان الباراميترين ‪ a‬و ‪.b‬‬

‫‪7‬‬ ‫)‪ public static double min(double a, double b‬ترجع العدد األصغر بين العددين اللذين نمررهما لها مكان الباراميترين ‪ a‬و ‪.b‬‬

‫‪8‬‬ ‫)‪public static double exp(double d‬ترجع قيمة الـ ‪ exponential‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪9‬‬ ‫)‪public static double log(double d‬ترجع قيمة الـ ‪ logarithm‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪10‬‬ ‫)‪public static double pow(double a, double b‬تضاعف قيمة الباراميتر ‪ a‬بقيمة الباراميتر ‪ b‬ثم ترجع الناتج‪.‬‬

‫‪11‬‬ ‫)‪public static double sqrt(double d‬ترجع قيمة الجذر التربيعي (‪ )square root‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪12‬‬ ‫)‪public static double sin(double d‬ترجع قيمة الـ ‪ sine‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪13‬‬ ‫)‪public static double cos(double d‬ترجع قيمة الـ ‪ cosine‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪14‬‬ ‫)‪public static double tan(double d‬ترجع قيمة الـ ‪ tangent‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪15‬‬ ‫)‪public static double asin(double d‬ترجع قيمة الـ ‪ arc sine‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪16‬‬ ‫)‪public static double acos(double d‬ترجع قيمة الـ ‪ arc cosine‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪17‬‬ ‫)‪public static double atan(double d‬ترجع قيمة الـ ‪ arc tangent‬للعدد الذي نمرره لها مكان الباراميتر ‪.d‬‬

‫‪18‬‬ ‫)‪ public static double toDegrees(double d‬تحول قيمة العدد الذي نمرره لها مكان الباراميتر ‪ d‬لـ ‪ Degrees‬ثم ترجع الناتج‪.‬‬

‫‪19‬‬ ‫)‪ public static double toRadians(double d‬تحول قيمة العدد الذي نمرره لها مكان الباراميتر ‪ d‬لـ ‪ Radians‬ثم ترجع الناتج‪.‬‬

‫‪20‬‬ ‫‪)(public static double random‬ترجع عدد عشوائي بين ‪ 0‬و ‪.1‬‬
‫مفهوم األحرف‬
‫أحرف‪ :‬تعني ‪ characters‬في اللغة اإلنجليزية‪ ,‬و نحن عادًة ما نستخدم أنواع البيانات البدائية ( أي الـ‪) primitive‬‬
‫لتخزين األحرف‪.‬‬
‫أي لتعريف متغير بهدف تخزين حرف‪ ,‬نعرفه كـ ‪ char‬أو ‪ int‬إذا كنا سنتعامل مع الملفات‪.‬‬
‫مثال‬
‫هنا المتغير ‪ ch‬يحتوي على الحرف ‪// a‬‬
‫;'‪char ch = 'a‬‬
‫هنا ‪ unicode‬يحتوي على الرمز ‪ Ω‬و الذي يعتبر حرف ‪//‬‬
‫المتغير‬
‫;'‪char unicode = '\u03A9‬‬
‫هنا قمنا بتعريف مصفوفة من األحرف ‪//‬‬
‫;} '‪char[] charArray = { 'a', 'b', 'c', 'd', 'e‬‬
‫احيانًا يضطر المبرمج أن يستخدم الكائن للنوع و ليس الشكل البدائي للنوع‪.‬‬
‫من أجل ذلك‪ ,‬جافا تقدم لنا الكالس ‪ Character‬الذي يحتوي على مجموعة من الدوال الجاهزة للتعامل مع األحرف‪.‬‬
‫لتخزين حرف ككائن من الكالس ‪ ,Character‬يمكنك إنشاء كائن من الكالس ‪ Character‬و تمرير الحرف الذي‬
‫تريد تخزينه فيه في الـ ‪.Constructor‬‬

‫;)'‪Character ch = new Character('a‬‬


‫مفهوم الـ ‪Escape Sequences‬‬
‫‪ Escape Sequence‬تعني مجموعة أحرف متتالية‪ ,‬إذا أتت وراء بعضها فإنها تشكل شيء معين‪.‬‬
‫لخلق ‪ Escape Sequence‬نستخدم الرمز \‪.‬‬
‫إذًا‪ ,‬أي حرف مسبوق بالرمز \ هو عبارة عن ‪ Escape Sequence‬و يعني شيء معين في جافا‪.‬‬

‫في هذه الالئحة وضعنا لك جميع الـ ‪ Escape Sequences‬الموجودين في جافا‪.‬‬


‫‪Escape Sequence‬‬ ‫تعريفه‬

‫\‪t‬‬ ‫يضيف عدة مسافات في مكان وضعها‪.‬‬

‫\‪b‬‬ ‫يزيل الحرف الموجود قبلها‪.‬‬

‫\‪n‬‬ ‫يجعل المحتوى الذي يأتي بعدها ينزل على سطر جديد‪.‬‬

‫\‪r‬‬ ‫يجعل الكود يبدأ في التنفيذ من عندها‪.‬‬

‫يضع فاصل بين المحتوى (أي تقسم المحتوى)‪.‬‬


‫\‪f‬‬ ‫مالحظة‪ :‬لن يظهر لك تأثيرها إال إذا إستخدمتها مع‬
‫الملفات‪.‬‬

‫\'‬ ‫إلضافة الرمز ' في مكان وضعها‪.‬‬

‫\"‬ ‫إلضافة الرمز " في مكان وضعها‪.‬‬

‫يستخدم إلضافة أي حرف أو رمز من خالل‬


‫\‪u‬‬
‫الـ ‪ unicode‬الخاص فيه‬
‫دوال الكالس ‪Character‬‬
‫الكالس ‪ Character‬هو كالس جاهز في جافا‪ ,‬يحتوي على دوال للتعامل مع األحرف‪ ,‬ذكرنا لك بعضها في هذا‬
‫الجدول‪.‬‬
‫الدالة مع تعريفها‬

‫)‪public static boolean isLetter(char ch‬ترجع ‪ true‬إذا كانت القيمة التي مررناها لها مكان الباراميتر ‪ ch‬عبارة عن حرف‪.‬‬
‫‪1‬‬ ‫غير ذلك ترجع ‪.false‬‬

‫)‪public static boolean isDigit(char ch‬ترجع ‪ true‬إذا كانت القيمة التي مررناها لها مكان الباراميتر ‪ ch‬عبارة عن رقم‪.‬‬
‫‪2‬‬ ‫غير ذلك ترجع ‪.false‬‬

‫)‪public static boolean isWhitespace(char ch‬ترجع ‪ true‬إذا كانت القيمة التي مررناها لها مكان الباراميتر ‪ ch‬عبارة عن مسافة فارغة‪.‬‬
‫‪3‬‬ ‫غير ذلك ترجع ‪.false‬‬

‫)‪public static boolean isUpperCase(char ch‬ترجع ‪ true‬إذا كانت القيمة التي مررناها لها مكان الباراميتر ‪ ch‬عبارة عن حرف كبير‪.‬‬
‫‪4‬‬ ‫غير ذلك ترجع ‪.false‬‬

‫)‪public static boolean isLowerCase(char ch‬ترجع ‪ true‬إذا كانت القيمة التي مررناها لها مكان الباراميتر ‪ ch‬عبارة عن حرف صغير‪.‬‬
‫‪5‬‬ ‫غير ذلك ترجع ‪.false‬‬

‫‪6‬‬ ‫)‪ public static char toUpperCase(char ch‬نمرر لها مكان الباراميتر الـ ‪ ch‬حرف صغير‪ ,‬فترجع لنا نفس الحرف و لكن كبير‪.‬‬

‫‪7‬‬ ‫)‪ public static char toLowerCase(char ch‬نمرر لها مكان الباراميتر الـ ‪ ch‬حرف كبير‪ ,‬فترجع لنا نفس الحرف و لكن صغير‪.‬‬

‫‪8‬‬ ‫)‪public static String toString(char c‬تحول قيمة الباراميتر ‪ c‬لقيمة نوعها ‪ String‬و ترجعها‪.‬‬
‫التعامل مع النصوص في جافا‬

‫مفهوم النصوص‬
‫نص‪ :‬تعني ‪ String‬في جافا‪ ,‬و الـ ‪ String‬عبارة عن مجموعة من األحرف‪.‬‬
‫النوع ‪ String‬عبارة عن كالس و الحظ أنه يبدأ بحرف كبير مثل إسم أي كالس في جافا‪.‬‬
‫إذًا عندما نقوم بتعريف ‪ String‬فنحن فعليًا نقوم بتعريف كائن‪ ,‬و لكننا نقول له متغير ألنه بشكل عام يسمح لنا بتخزين أي‬
‫قيمة بداخله و لكنه في األساس كائن نوعه ‪ String‬و ليس متغير عادي‪.‬‬
‫طريقة تعريف ‪String‬‬
‫أبسط طريقة و األكثر إستخدامًا هي تعريفه مثل متغير عادي‪.‬‬
‫مثال‬
‫;"!‪String greeting = "Hello world‬‬

‫تذكر أنك حتى لو قمت بتعريفه مثل متغير عادي‪ ,‬سيعتبره المترجم كائن‪.‬‬
‫و مثل أي كائن‪ ,‬تستطيع إنشاء كائن نوعه ‪ String‬من خالل الكلمة ‪ new‬و من خالل الكونستركتور‪ ,‬و ستفهم معنى‬
‫هاتين الكلمتين في دروس الحقة‪.‬‬
‫الكالس ‪ String‬يحتوي على ‪ 13‬كونستركتور يمكنك استخدامهم لوضع قيمة أولية في النص من خالل عدة مصادر‪,‬‬
‫مثل من مصفوفة أحرف‪.‬‬
‫{ ‪public class Main‬‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف مصفوفة من األحرف ‪//‬‬
‫;} '‪char[] helloArray = { 'h', 'e', 'l', 'l', 'o‬‬
‫هنا وضعنا محتوى ‪ helloString‬من خالل الكونستركتور ‪//‬‬
‫مصفوفة األحرف كنص للكائن‬
‫;)‪String helloString = new String(helloArray‬‬
‫هنا قمنا بعرض قيمة الكائن ‪// helloString‬‬
‫;) ‪System.out.println( helloString‬‬
‫}‬
‫}‬
‫مفهوم الـ ‪Concatenation‬‬
‫‪ Concatenation‬تعني إضافة محتوى نص على نص‪ ,‬أي كأنك تنسخ نص و تلصقه في نهاية نص آخر‪.‬‬
‫{ ‪public class Main‬‬ ‫يمكنك تطبيق الـ ‪ Concatenation‬في جافا بطريقتين‪:‬‬
‫{ )‪public static void main(String[] args‬‬ ‫بإستخدام العامل ‪.+‬‬
‫هنا قمنا ‪String s1 = "welcome to "; //‬‬ ‫أو بإستدعاء الدالة ‪ )(concat‬التي شرحناها الحقًا في هذا الدرس‪.‬‬
‫بتعريف النص األول‬
‫هنا قمنا ‪String s2 = "harmash.com"; //‬‬
‫بتعريف النص الثاني‬
‫أضفنا قيمة النصين ‪String s3 = s1 + s2; //‬‬
‫السابقين في النص الثالث‬
‫هنا عرضنا قيمة ‪System.out.println( s3 ); //‬‬
‫النص الثالث لنتأكد إذا تمت عملية اإلضافة كما نريد‬
‫}‬
‫}‬
‫مصطلحات مهمة عليك معرفة معناها‬
‫لنفترض أننا قمنا بتعريف ‪ String‬إسمه ‪ welcome‬و أعطيناه قيمة‪.‬‬
‫مثال‬
‫;"‪•String welcome = "welcome to harmash.com‬‬

‫الصورة‪.‬‬ ‫سيتم تخزين محتوى النص في الذاكرة حرفًا حرفًا و بالترتيب و يبدأ بترقيمهم من الرقم ‪ 0‬كما في هذه‬

‫مصطلحات تقنية‬
‫عدد أحرف الـ ‪ String‬يسمى ‪.length‬‬
‫رقم الخانة يسمى ‪.index‬‬
‫إذا قمنا بأخذ جزء من الـ ‪ String‬يسمى هذا الجزء ‪.substring‬‬

‫أنت كمبرمج يمكنك إستغالل أرقام الخانات لتصل لمحتوى النص و تفعل به ما تشاء‪.‬‬
‫هناك دوال كثيرة جاهزة في جافا للتعامل مع النصوص‪ ,‬عليك فقط فهم طريقة عملها و استخدامها‪.‬‬

‫مثال‬
‫دوال الكالس ‪String‬‬
‫الكالس ‪ String‬هو كالس جاهز في جافا‪ ,‬يحتوي على دوال كثيرة للتعامل مع محتوى النصوص‪ ,‬سواء للبحث عن‬
‫أحرف أو كلمات أو جمل‪ ,‬تجزيء النص‪ ,‬تغيير الـ ‪ Case‬لألحرف‪ ,‬دمج النصوص إلخ‪..‬‬
‫سنقسم دوال الكالس ‪ String‬إلى ‪ 5‬فئات أساسية كما في الجدول التالي‪:‬‬
‫دوال للبحث (‪.)Searching‬‬
‫دوال للتجزيء (‪.)Substring‬‬
‫دوال للتبديل (‪.)Replacing‬‬
‫دوال للمقارنة (‪.)Comparison‬‬
‫دوال للمعالجة (‪.)Manipulation‬‬
‫إسم الدالة مع تعريفها‬

‫)‪public char charAt(int index‬‬


‫‪1‬‬ ‫ترجع الحرف الموجود على الـ ‪ index‬الذي نمرره لها مكان الباراميتر ‪ index‬في الـ ‪ String‬الذي قام بإستدعائها‪.‬‬

‫)‪public int indexOf(String str‬‬


‫‪2‬‬ ‫تبحث في الـ ‪ String‬الذي قام بإستدعائها عن أول ‪ index‬يوجد إبتداءَا من عنده نفس النص الذي نمرره لها مكان الباراميتر ‪ str‬و‬
‫ترجعه‪.‬‬

‫)‪public int lastIndexOf(String str‬‬


‫‪3‬‬ ‫تبحث في الـ ‪ String‬الذي قام بإستدعائها عن آخر ‪ index‬يوجد إبتداءَا من عنده نفس النص الذي نمرره لها مكان الباراميتر ‪ str‬و‬
‫ترجعه‪.‬‬

‫)‪public boolean contains(CharSequence cs‬‬


‫ترجع ‪ true‬في حال كان الـ ‪ String‬الذي قام بإستدعائها يحتوي على نفس قيمة النص الذي نمرره لها مكان الباراميتر ‪ cs‬ككائن من‬
‫‪4‬‬ ‫الكالس ‪.CharSequence‬‬
‫غير ذلك ترجع ‪.false‬‬
public class Main {
public static void main(String[] args) {
String s = "java is amazing";
System.out.println( s.charAt(5) );
}
}
public class Main {
public static void main(String[] args) {
String Str = "welcome to harmash.com, harmash is one of
the best site for learning";
String subStr = "harmash";
System.out.println( Str.indexOf('a') ); // a ‫ وجد فيه الحرف‬index
‫ستطبع أول‬
System.out.println( Str.indexOf('a', 14) ); // 14 ‫ رقم‬index ‫و‬
‫ ستبدأ في البحث من الـ‬a ‫ وجد فيه الحرف‬index ‫ستطبع أول‬
System.out.println( Str.indexOf(subStr) ); // subStr ‫وجد فيه‬
‫ النص‬index ‫ستطبع أول‬
System.out.println( Str.indexOf(subStr, 16) ); // 16 ‫ رقم‬index
‫ و ستبدأ في البحث من الـ‬subStr ‫ وجد فيه النص‬index ‫ستطبع أول‬
System.out.println( Str.indexOf('x') ); // ‫ ألنها لن تجد‬-1 ‫ستطبع‬
‫هذا الحرف في كل النص‬
System.out.println( Str.indexOf('@') ); // ‫ ألنها لن تجد‬-1 ‫ستطبع‬
‫هذا الحرف في كل النص‬
System.out.println( Str.indexOf("hello") ); // ‫ ألنها لن‬-1 ‫ستطبع‬
‫تجد هذا النص في كل النص‬
}
}
public class Main {
public static void main(String[] args) {
String Str = "welcome to harmash.com, harmash is one of
the best site for learning";
String subStr = "harmash";
System.out.println( Str.lastIndexOf('a') ); // a ‫وجد فيه الحرف‬
index ‫ستطبع آخر‬
System.out.println( Str.lastIndexOf('a', 14) ); // 14 ‫ رقم‬index
‫ قبل الـ‬a ‫ وجد فيه الحرف‬index ‫ستطبع آخر‬
System.out.println( Str.lastIndexOf(subStr) ); // subStr ‫وجد‬
‫ فيه النص‬index ‫ستطبع آخر‬
System.out.println( Str.lastIndexOf(subStr, 16) ); // 16 ‫رقم‬
index ‫ قبل الـ‬subStr ‫ وجد فيه النص‬index ‫ستطبع آخر‬
System.out.println( Str.lastIndexOf('x') ); // ‫ ألنها لن‬-1 ‫ستطبع‬
‫تجد هذا الحرف في كل النص‬
System.out.println( Str.lastIndexOf('@') ); // ‫ ألنها لن‬-1 ‫ستطبع‬
‫تجد هذا الحرف في كل النص‬
System.out.println( Str.lastIndexOf("hello") ); // -1 ‫ستطبع‬
‫ألنها لن تجد هذا النص في كل النص‬
}
} public class Main {
public static void main(String[] args) {
String s = "learn java in harmash.com";
CharSequence cs1 = "java";
CharSequence cs2 = "c++";
System.out.println( s.contains(cs1) );
System.out.println( s.contains(cs2) );
}
}
‫دوال التجزيء الموجودة في الكالس ‪String‬‬

‫إسم الدالة مع تعريفها‬

‫)‪public String substring(int startIndex, int endIndex‬‬


‫‪1‬‬ ‫ترجع ‪ String‬عبارة عن جزء (‪ )substring‬من الـ ‪ String‬الذي قام باستدعائها‪.‬‬

‫)‪public CharSequence subSequence(int startIndex, int endIndex‬‬


‫‪2‬‬ ‫ترجع كائن من الكالس ‪ CharSequence‬عبارة عن جزء (‪ )substring‬من الـ ‪ String‬الذي قام باستدعائها‪.‬‬

‫)‪public String[] split(String regex‬‬


‫‪3‬‬ ‫ترجع نسخة من الـ ‪ String‬الذي قام باستدعائها مقسمة على شكل مصفوفة نوعها ‪.String‬‬
‫مكان الباراميتر ‪ regex‬نمرر نص يحدد الطريقة التي سيتم على أساسها تقسيم الـ ‪ String‬و وضع كل قسم فيها في عنصر بداخل‬
‫المصفوفة‪.‬‬
public class Main {
public static void main(String[] args) {
String s = "welcome to harmash.com, best site for
learning";
System.out.println( s.substring(11) ); // 11 ‫ رقم‬index
‫ تبدأ من الـ‬substring ‫هنا سترجع الدالة‬
System.out.println( s.substring(11, 22) ); // 22 ‫رقم‬
index ‫ و تنتهي قبل الـ‬11 ‫ رقم‬index ‫ تبدأ من الـ‬substring ‫هنا‬
‫سترجع الدالة‬
}
}
public class Main {
public static void main(String[] args) {
String s = "welcome to harmash.com, best site for
learning";
// 22 ‫ رقم‬index ‫ و تنتهي قبل الـ‬11 ‫ رقم‬index ‫تبدأ من الـ‬
subSequence ‫هنا سترجع الدالة‬
System.out.println( s.subSequence(11, 22) );
}
}
public class Main {
public static void main(String[] args) {
String str = "welcome-to-harmash.com";
// parts ‫بعدها سيتم وضع المصفوفة التي سترجعها في‬
‫ المصفوفة‬.str ‫ حتى تجزء نص الكائن‬- ‫ ستعتمد على الرمز‬split()
‫هنا الدالة‬
String[] parts = str.split("-");
String part1 = parts[0]; // welcome :‫الجزء األول سيحتوي‬
‫على النص‬
String part2 = parts[1]; // to :‫الجزء الثاني سيحتوي على‬
‫النص‬
String part3 = parts[2]; // harmash.com :‫الجزء الثالث‬
‫سيحتوي على النص‬
System.out.println( part1 );
System.out.println( part2 );
System.out.println( part3 );
}
}
‫دوال التبديل الموجودة في الكالس ‪String‬‬

‫إسم الدالة مع تعريفها‬

‫)‪public String replace(char oldSequence, char newSequence‬‬


‫‪1‬‬ ‫عند استدعائها نمرر لها قيمتين عبارة عن ‪ char‬أو ‪.CharSequence‬‬
‫تبحث في الـ ‪ String‬الذي قام باستدعائها عن القيمة األولى التي نمررها لها و تبدلها بالقيمة الثانية التي نمررها لها‪.‬‬

‫)‪public String replaceAll(String regex, String replacement‬‬


‫تستخدم للبحث في الـ ‪ String‬الذي قام باستدعائها عن ‪ Substring‬ما لتبديله بنص جديد‪.‬‬
‫‪2‬‬ ‫مكان الباراميتر ‪ regex‬نمرر نص يمثل النص الذي نريد استبداله‪.‬‬
‫و مكان الباراميتر ‪ replacement‬نمرر النص الذي سيحل مكانه‪.‬‬
‫إذًا هنا كلما تم إيجاد نفس قيمة الباراميتر ‪ regex‬سيتم إستبدالها بقيمة الباراميتر ‪.replacement‬‬

‫)‪public String replaceFirst(String regex, String replacement‬‬


‫تستخدم لتبديل نص محدد بداخل الـ ‪ String‬الذي قام باستدعائها‪.‬‬
‫‪3‬‬ ‫مكان الباراميتر ‪ regex‬نمرر نص يمثل النص الذي نريد استبداله‪.‬‬
‫و مكان الباراميتر ‪ replacement‬نمرر النص الذي سيحل مكانه‪.‬‬
‫إذًا هنا عند إيجاد نفس قيمة الباراميتر ‪ regex‬سيتم إستبدالها بقيمة الباراميتر ‪.replacement‬‬
public class Main {
public static void main(String[] args) {
String str = "welcome to harmash.com";
System.out.println( str.replace('a', 'X') );
System.out.println( str.replace(' ', '-') );
System.out.println( str.replace("com", "net") );
}
}

public class Main {


public static void main(String[] args) {
String str = "1 mhamad 205 wissam 333 ziad 55 88 hamada";
// ‫ و سنعرض الناتج الذي سترجعه مباشرًة‬- ‫هنا ستبدل الفراغ بـ‬
System.out.println( str.replaceAll(" ", "-") );
// strWithOutNumbers ‫ أي ستمسح جميع األرقام و سترجع‬,‫هنا ستبدل األرقام بال شيء‬
‫الناتج في‬
String strWithOutNumbers = str.replaceAll("[0-9]+", "");
System.out.println( strWithOutNumbers );
// strOnlyNumbers ‫ أي ستمسح جميع األحرف و سترجع‬,‫هنا ستبدل األحرف بال شيء‬
‫الناتج في‬
String strOnlyNumbers = str.replaceAll("[a-zA-Z]+", "");
System.out.println( strOnlyNumbers );
}
}
public class Main {
public static void main(String[] args) {
String str = "Mhamad harmush 1 2 3";
// ‫ و ستعرض الناتج الذي سترجعه مباشرًة‬- ‫هنا ستبدل أول فراغ بـ‬
System.out.println( str.replaceFirst(" ", "-") );
// strWithOutNumbers ‫ أي ستمسح أول رقم فقط و سترجع الناتج في‬,‫هنا ستبدل أول رقم بال شيء‬
String strWithOutNumbers = str.replaceFirst("[0-9]+", "");
System.out.println( strWithOutNumbers );
// strOnlyNumbers ‫ أي ستمسح أول نص فقط و سترجع الناتج في‬,‫هنا ستبدل أول كلمة بال شيء‬
String strOnlyNumbers = str.replaceFirst("[a-zA-Z]+", "");
System.out.println( strOnlyNumbers );
}
}
‫دوال المقارنة الموجودة في الكالس ‪String‬‬
‫إسم الدالة مع تعريفها‬

‫)‪public boolean startsWith(String prefix‬تستخدم لمعرفة ما إذا كان الـ ‪ String‬الذي قام باستدعائها يبدأ بنص معين أم ال‪.‬‬
‫‪1‬‬ ‫إذا كانت قيمة الباراميتر ‪ prefix‬موجودة في بدايته ترجع ‪ ,true‬غير ذلك ترجع ‪.false‬‬

‫)‪public boolean endsWith(String suffix‬تستخدم لمعرفة ما إذا كان الـ ‪ String‬الذي قام باستدعائها ينتهي بنص معين أم ال‪.‬‬
‫‪2‬‬ ‫إذا كانت قيمة الباراميتر ‪ prefix‬موجودة في نهايته ترجع ‪ ,true‬غير ذلك ترجع ‪.false‬‬

‫)‪public boolean equals(Object anObject‬تقارن قيمة الـ ‪ String‬الذي قام باستدعائها مع قيمة أي كائن نمرره لها مكان الباراميتر ‪.anObject‬‬
‫‪3‬‬ ‫ترجع ‪ true‬في حال كانت جميع أحرفهم متطابقة‪ ,‬غير ذلك ترجع ‪.false‬‬

‫)‪public boolean equalsIgnoreCase(String str‬تقارن قيمة الـ ‪ String‬الذي قام باستدعائها مع قيمة الـ ‪ String‬الذي نمرره لها مكان الباراميتر ‪.str‬‬
‫‪4‬‬ ‫ترجع ‪ true‬في حال كانت جميع أحرفهم متطابقة و ال يهمها إذا كانت األحرف كبير أو صغيرة‪ ,‬غير ذلك ترجع ‪.false‬‬

‫)‪public boolean contentEquals(StringBuffer sb‬تقارن قيمة الـ ‪ String‬الذي قام باستدعائها مع قيمة كائن الـ ‪ StringBuffer‬الذي نمرره لها مكان الباراميتر ‪.sb‬‬
‫‪5‬‬ ‫ترجع ‪ true‬في حال كانت جميع أحرفهم متطابقة‪ ,‬غير ذلك ترجع ‪.false‬‬

‫)‪public int compareTo(String anotherString‬تقارن قيمة الـ ‪ String‬الذي قام باستدعائها مع قيمة الـ ‪ String‬الذي نمرره لها مكان الباراميتر ‪.anotherString‬‬
‫‪6‬‬ ‫ترجع ‪ 0‬في حال كانت جميع أحرفهم متساوية‪ .‬و ترجع قيمة أكبر أو أصغر من ‪ 0‬تمثل الفارق بين كود الـ ‪ ASCII‬الخاص بأول حرف مختلف تم إيجاده بينهما‪.‬‬

‫)‪public int compareToIgnoreCase(String anotherString‬تقارن قيمة الـ ‪ String‬الذي قام باستدعائها مع قيمة الـ ‪ String‬الذي نمرره لها مكان الباراميتر ‪ anotherString‬و ال يهمها إذا كانت األحرف كبير أو صغيرة‪.‬‬
‫‪7‬‬ ‫ترجع ‪ 0‬في حال كانت جميع أحرفهم متساوية‪ .‬و ترجع قيمة أكبر أو أصغر من ‪ 0‬تمثل الفارق بين كود الـ ‪ ASCII‬الخاص بأول حرف مختلف تم إيجاده بينهما‪.‬‬
‫شاهد المثال »‬

‫)‪public boolean matches(String regex‬تقارن قيمة الـ ‪ String‬الذي قام باستدعائها مع التعبير النمطي الذي نمرره لها مكان الباراميتر ‪.regex‬‬
‫‪8‬‬ ‫ترجع ‪ true‬في حال كانت جميع أحرفهم متطابقة‪ ,‬غير ذلك ترجع ‪.false‬‬

‫‪9‬‬ ‫)‪public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len‬تقارن جزء محدد في الـ ‪ String‬الذي قام باستدعائها مع جزء محدد في الـ ‪ String‬الذي نمرره لها مكان الباراميتر ‪.other‬‬
‫ترجع ‪ true‬في حال كانت جميع أحرفهم متطابقة‪ ,‬غير ذلك ترجع ‪.false‬‬
public class Main {
public static void main(String[] args) {
String str = "welcome to harmash.com";
System.out.println( str.startsWith("welcome to") ); // str ‫ ألنها موجودة في بداية النص‬true ‫سترجع‬
System.out.println( str.startsWith("welc") ); // str ‫ ألنها موجودة في بداية النص‬true ‫سترجع‬
System.out.println( str.startsWith("harmash") ); // str ‫ ألنها ليست موجودة في بداية النص‬false ‫سترجع‬
System.out.println( str.startsWith("harmash", 11) ); // str ‫ في النص‬11 ‫ رقم‬index ‫ ألنها موجودة في بداية الـ‬true ‫سترجع‬
System.out.println( str.startsWith("") ); // ‫ ألننا نختبر قيمة فارغة‬true ‫سترجع‬
}
}
public class Main {
public static void main(String[] args) {
String str = "welcome to harmash.com";
System.out.println( str.endsWith("harmash.com") ); // str ‫ ألنها موجودة في نهاية النص‬true ‫سترجع‬
System.out.println( str.endsWith("harmash") ); // str ‫ ألنها ليست موجودة في نهاية النص‬false ‫سترجع‬
System.out.println( str.endsWith("") ); // ‫ ألننا نختبر قيمة فارغة‬true ‫سترجع‬
}
}
public class Main {
public static void main(String[] args) {
String s1 = "hello my name is Mhamad";
String s2 = s1;
String s3 = "at 20 years old, i made harmash.com";
System.out.println( s1.equals(s2) ); // s2 ‫ تساوي قيمة‬s1 ‫ ألن قيمة‬true ‫هنا سترجع‬
System.out.println( s1.equals(s3) ); // s3 ‫ ال تساوي قيمة‬s1 ‫ ألن قيمة‬false ‫هنا سترجع‬
}
}
public class Main {
public static void main(String[] args) {
String s1 = "hello my name is Mhamad";
String s2 = "HELLO MY NAME IS MHAMAD";
String s3 = s2;
// ‫ ألنه ال يهمها إذا كان يوجد إختالف في حجم األحرف طالما أن األحرف التي تم مقارنتها هي نفسها‬true ‫هنا سترجع‬
System.out.println( s1.equalsIgnoreCase(s2) );
// s3 ‫ تساوي تمامًا قيمة‬s2 ‫ ألن قيمة‬true ‫هنا سترجع‬
System.out.println( s2.equalsIgnoreCase(s3) );
}
}
public class Main {
public static void main(String[] args) {
String s = "welcome to harmash.com";
StringBuffer sb1 = new StringBuffer("welcome to harmash.com");
System.out.println( s.contentEquals(sb1) ); // sb1 ‫ تساوي قيمة‬s ‫ ألن قيمة‬true ‫هنا سترجع‬
StringBuffer sb2 = new StringBuffer("welcome to java world");
System.out.println( s.contentEquals(sb2) ); // sb2 ‫ ال تساوي قيمة‬s ‫ ألن قيمة‬false ‫هنا سترجع‬
}
}
public class Main {
public static void main(String[] args) {
// ASCII ‫ في ترميز الـ‬:‫معلومة‬
// h = 104 H = 72
String s1 = "welcome to harmash.com, one of the best websites for learning";
String s2 = "welcome to Harmash.com, amazing website for programmers";
String s3 = s1;
System.out.println( s1.compareTo(s2) ); // h - H = 104 - 72 = 32
System.out.println( s2.compareTo(s1) ); // h - H = 72 - 104 = -32
System.out.println( s1.compareTo(s3) ); // ‫ ألنه ال يوجد أي فارق بينهما‬0 ‫هنا سترجع‬
}
}
public class Main {
public static void main(String[] args) {
// ACII ‫ في ترميز الـ‬:‫معلومة‬
// A = 65 a = 97 o = 111
// ‫ أثناء مقارنتهم ستعتبر جميع األحرف أحرف صغيرة‬:‫مالحظة‬
// 97 ‫ تساوي‬Amazing ‫ الكبيرة في كلمة‬A ‫لذلك ستعتبر الـ‬
String s1 = "welcome to harmash.com, one of the best websites for learning";
String s2 = "Welcome To Harmash.com, Amazing Website For Programmers";
String s3 = s1;
System.out.println( s1.compareToIgnoreCase(s2) ); // o - A = o - a = 111 - 97 = 14
System.out.println( s2.compareToIgnoreCase(s1) ); // A - o = a - o = 97 - 111 = 14
System.out.println( s1.compareToIgnoreCase(s3) ); // ‫ ألنه ال يوجد أي فارق بينهما‬0 ‫هنا سترجع‬
}
}

public class Main {


public static void main(String[] args) {
String str = "welcome to harmash.com";
System.out.println( str.matches("harmash") ); // false ‫ترجع‬
System.out.println( str.matches("welcome(.*)") ); // true ‫ترجع‬
System.out.println( str.matches("(.*)harmash(.*)") ); // true ‫ترجع‬
}
}
public class Main {
public static void main(String[] args) {
String s1 = "welcome to harmash.com";
String s2 = "harmash";
String s3 = "HARMASH";
System.out.println( s1.regionMatches(11, s2, 0, 7) );
System.out.println( s1.regionMatches(11, s3, 0, 7) );
System.out.println( s1.regionMatches(true, 11, s3, 0, 7) );
}
}
‫دوال المعالجة الموجودة في الكالس ‪String‬‬
‫إسم الدالة مع تعريفها‬

‫‪1‬‬ ‫)‪public String concat(String s‬ترجع نسخة من الـ ‪ String‬الذي قام باستدعائها مضافًا عليه قيمة الـ ‪ String‬الذي نمرره لها مكان الباراميتر ‪.s‬‬

‫‪2‬‬ ‫)‪public static String copyValueOf(char[] data‬ترجع نسحة من مصفوفة األحرف التي نمررها لها مكان الباراميتر ‪ data‬كـ ‪.String‬‬

‫)‪public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin‬تنسخ أحرف الـ ‪ String‬الذي قام باستدعائها بداخل مصفوفة األحرف التي نمررها لها مكان الباراميتر ‪ dst‬مع تحديد النطاق الذي نريد نسخه و المكان‬
‫‪3‬‬ ‫الذي نريد وضع األحرف فيه‪.‬‬

‫‪4‬‬ ‫‪)(public int hashCode‬ترجع قيمة الـ ‪ hash code‬للـ ‪ String‬الذي قام باستدعائها‪.‬‬

‫‪5‬‬ ‫‪)(public String intern‬تمنع وجود أكثر من ‪ String‬يحتوى على نفس المحتوى‪ ,‬لذلك هي مهمة جدًا من أجل التخزين‪ .‬فهي تسرع عمل المعالج و تحفظ مساحات الذاكرة‪.‬‬

‫‪6‬‬ ‫‪)(public int length‬ترجع رقم يمثل عدد أحرف الـ ‪ String‬الذي قام باستدعائها‪.‬‬

‫‪7‬‬ ‫‪)(public char[] toCharArray‬ترجع أحرف الـ ‪ String‬الذي قام باستدعائها كمصفوفة نوعها ‪.char‬‬

‫‪8‬‬ ‫‪)(public String toLowerCase‬ترجع نسخة من الـ ‪ String‬الذي قام باستدعائها كل أحرفها صغيرة‪.‬‬

‫‪9‬‬ ‫‪)(public String toUpperCase‬ترجع نسخة من الـ ‪ String‬الذي قام باستدعائها كل أحرفها كبيرة‪.‬‬

‫‪10‬‬ ‫‪)(public String trim‬ترجع نسخة من الـ ‪ String‬الذي قام باستدعائها ال تحتوي على مسافات فارغة في بدايتها و نهايتها‪.‬‬

‫‪11‬‬ ‫)‪public String valueOf(Object anObject‬ترجع أي قيمة نمررها لها مكان الباراميتر ‪ anObject‬كـ ‪.String‬‬
public class Main {
public static void main(String[] args) {
String s1 = "This part is from s1. ";
String s2 = "This part is from s2";
// s3 ‫ بعدها الجواب الذي سيرجع سيتخزن في‬.s1 ‫ في آخر‬s2 ‫ستضيف الدالة قيمة‬
String s3 = s1.concat( s2 );
System.out.println( s3 );
}
}
public class Main {
public static void main(String[] args) {
char[] ch = {'I', ' ', 'l', 'o', 'v', 'e', ' ', 'j', 'a', 'v', 'a'};
String s = "";
s = String.copyValueOf( ch );
System.out.println( s );
s = String.copyValueOf( ch, 2, 4 );
System.out.println( s );
}
}
public class Main {
public static void main(String[] args) {
String str = "welcome to harmash.com";
char[] arr = new char[10];
str.getChars( 0, 10, arr, 0 );
System.out.println( "Copied value = " + arr );
}
}

public class Main {


public static void main(String[] args) {
String s = "welcome to harmash.com";
System.out.println( "The hascode of s is: " + s.hashCode() );
}
}

public class Main {


public static void main(String[] args) {
String s1 = "welcome to harmash.com";
String s2 = new String("welcome to harmash.com");
System.out.println( s1 == s2 ); // false ‫ لذلك سيرجع‬s2 ‫ ليس مطابقًا لنوع الـ‬s1 ‫هنا سيعتبر أن نوع الـ‬
System.out.println( s1 == s2.intern() ); // true ‫ لذلك سيرجع‬,‫هنا سيقارن قيمهم فقط دون اإلهتمام بنوعهم‬
}
}
public class Main {
public static void main(String[] args) {
String s1 = "welcome to harmash.com";
String s2 = new String("java is object oriented programming language");
System.out.println( "length of s1 = " + s1.length() );
System.out.println( "length of s2 = " + s2.length() );
}
}
public class Main {
public static void main(String[] args) {
String s = "welcome to harmash.com";
System.out.println( s.toCharArray() );
}
}
public class Main {
public static void main(String[] args) {
String s = "Welcome To Harmash.Com";
System.out.println( s.toLowerCase() );
}
}
public class Main {
public static void main(String[] args) {
String s = "Welcome To Harmash.Com";
System.out.println( s.toUpperCase() );
}
}
public class Main {
public static void main(String[] args) {
String s = " welcome to harmash.com ";
System.out.println( s.trim() );
}
}

public class Main {


public static void main(String[] args) {
int i = 10;
double d = 55.99;
long l = 123456;
boolean b = true;
char[] arr = {'j', 'a', 'v', 'a'};
System.out.println( "Return Value: " + String.valueOf(i) );
System.out.println( "Return Value: " + String.valueOf(d) );
System.out.println( "Return Value: " + String.valueOf(l) );
System.out.println( "Return Value: " + String.valueOf(b) );
System.out.println( "Return Value: " + String.valueOf(arr) );
}
}
‫التعامل مع المصفوفات في جافا‬

‫مفهوم المصفوفات‬
‫مصفوفة‪ :‬تعني ‪ Array‬في البرمجة‪ .‬و المصفوفة عبارة عن كائن يحتوي مجموعة عناصر من نفس النوع تتخزن بجوار‬
‫بعضها في الذاكرة‪.‬‬
‫بمعنى آخر المصفوفة عبارة عن كائن يمكنه تخزين عدة قيم من نفس النوع‪.‬‬
‫عناصر المصفوفة تتميز عن بعضها من خالل رقم محدد يعطى لكل عنصر يسمى ‪ .index‬أول عنصر فيها يتم تخزينه في‬
‫الـ ‪ index‬رقم ‪.0‬‬
‫عدد عناصر المصفوفة ثابت‪ ,‬أي بمجرد أن قمت بتحديده ال يمكنك تغييره من جديد‪ ,‬لكنك تستطيع تغيير قيم هذه العناصر‬
‫متى شئت‪.‬‬
‫فوائد الـ ‪Array‬‬
‫تقليل عدد المتغيرات المتشابهة‪ ,‬فمثًال إذا كنا نريد تعريف ‪ 10‬متغيرات نوعهم ‪ ,int‬نقوم بتعريف مصفوفة واحدة تتألف‬
‫من ‪ 10‬عناصر‪.‬‬
‫تطوير الكود‪ ,‬إذا قمت بتخزين المعلومات داخل مصفوفة‪ ,‬تستطيع تعديلهم‪ ,‬مقارنتهم أو جلبهم كلهم دفعة واحدة بكود صغير‬
‫جدًا باستخدام الحلقات‪.‬‬
‫تستطيع الوصول ألي عنصر من خالل الـ ‪.index‬‬
‫المشكلة الوحيدة في الـ ‪Array‬‬
‫حجمها ثابت‪ ,‬أي عندما تقوم بتعريف مصفوفة و تحدد عدد عناصرها ‪,‬ال يمكنك تغيير حجمها الحقًا‪ ,‬أي ال يمكن حذف‬
‫عنصر أو زيادة واحد جديد‪.‬‬
‫هذه المشكلة تم حلها الحقًا من خالل إطار تخزين متطور يسمى ‪ Collection‬ستتعرف عليه في دروس الحقة‪.‬‬
‫تعريف مصفوفة‬
‫‪ //‬يمكنك تعريفها هكذا‬
‫‪ //‬هذا األسلوب المفضل في جافا‬ ‫‪;datatype[] arrayRefVar‬‬

‫‪ //‬أو هكذا‬
‫‪;datatype []arrayRefVar‬‬

‫‪ //‬أو هكذا‬
‫‪;][datatype arrayRefVar‬‬

‫;‪double[] doubleArray‬‬
‫هنا قمنا بتعريف مصفوفة ذات بعدين‪ ,‬نوعها ‪// int‬‬
‫;‪int[][] intArray‬‬
‫هنا قمنا بتعريف مصفوفة ذات بعد واحد‪ ,‬نوعها ‪// String‬‬
‫;‪String[] stringArray‬‬

‫طريقة إنشاء مصفوفة و إعطائها القيم الحقًا‬


‫;]‪arrayRefVar = new datatype[size‬‬

‫طريقة إنشاء مصفوفة و إعطائها قيم أولية مباشرًة عند‬


‫إنشائها‬
‫;} ‪arrayRefVar = { value0, value1, ..., valuek‬‬
‫شكل المصفوفة في الذاكرة‬
‫لنفترض اآلن أننا قمنا بتعريف مصفوفة نوعها ‪ ,int‬إسمها ‪ ,a‬تتألف من ‪ 5‬عناصر‪.‬‬
‫;} ‪int[] a = { 10, 20, 30, 40, 50‬‬

‫يمكنك تصور شكل المصفوفة ‪ a‬في الذاكرة كالتالي‪.‬‬

‫بما أن المصفوفة تتألف من ‪ 5‬عناصر‪ ,‬تم إعطاء العناصر أرقام ‪ index‬بالترتيب من ‪ 0‬إلى ‪.4‬‬
‫ذًا هنا أصبح عدد عناصر المصفوفة يساوي ‪ 5‬و هو ثابت ال يمكن تغييره الحقًا في الكود‪.‬‬
‫و يمكنك إستخدام أرقام الـ ‪ index‬لتصل لجميع عناصر المصفوفة سواء لعرض القيم أو لتغييرها‪.‬‬
‫في المثال التالي‪ ,‬قمنا بتعريف مصفوفة‪ ,‬ثم غيرنا قيمة العنصر األول‪ ,‬ثم عرضناها‪ ,‬من خالل الـ ‪ index‬الخاص‬
‫بالعنصر‪.‬‬
‫بعدها‪ ,‬إستخدامنا الخاصية ‪ length‬الموجودة في جافا لطباعة عدد عناصر المصفوفة‪.‬‬
‫{ ‪public class Main‬‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف مصفوفة تتألف من ‪ 5‬عناصر ‪int[] a = { 10, 20, 30, 40, 50 }; //‬‬
‫هنا قمنا بتغيير قيمة العنصر األول ‪a[0] = 99; //‬‬
‫هنا عرضنا قيمة العنصر األول ‪System.out.println("a[0] = " + a[0]); //‬‬
‫هنا عرضنا عدد عناصر المصفوفة ‪System.out.println("a.length = " + a.length); //‬‬
‫}‬
‫}‬
‫مثال شامل حول التعامل مع المصفوفات‬

public class Main {


public static void main(String[] args) {
// 1- ‫هنا قمنا بتعريف المصفوفة‬
int[] numbers = new int[5];
// 2- ‫هنا قمنا بعرض قيم جميع عناصرها‬
for(int i=0; i<numbers.length; i++)
{
System.out.println("numbers[" + i + "]: " + numbers[i]);
}
// 3- ‫هنا قمنا يتغيير قيم جميع عناصرها‬
numbers[0] = 1000;
numbers[1] = 2000;
numbers[2] = 3000;
numbers[3] = 4000;
numbers[4] = 5000;
System.out.println();
// 4- ‫هنا قمنا بعرض قيم جميع عناصرها‬
for(int i=0; i<numbers.length; i++)
{
System.out.println("numbers[" + i + "]: " + numbers[i]);
}
}
}
‫الحلقة ‪foreach‬‬
‫إبتداءًا من اإلصدار ‪ 1.5‬في جافا‪ ,‬قدم لنا حلقة ‪ for‬جديدة إسمها ‪.foreach loop‬‬
‫هذه الحلقة تسمح لك بالمرور على جميع عناصر المصفوفة دون الحاجة لتعريف عداد و تحديد أين يبدأ و أين ينتهي‪.‬‬

‫{ ) ‪for( element: array‬‬


‫‪// statements‬‬
‫}‬

‫‪ :element‬هو متغير عادي نقوم بتعريفه بداخل الحلقة و نعطيه نفس نوع المصفوفة التي نضعها بعد النقطتين‪ ,‬ألنه في‬
‫كل دورة سيقوم بتخزين قيمة عنصر من عناصرها‪ ,‬لذلك يجب وضع نوعه مثل نوعها‪.‬‬
‫{ ‪public class Main‬‬ ‫‪ :array‬هي المصفوفة التي نريد الوصول لجميع عناصرها‪.‬‬
‫{ )‪public static void main(String[] args‬‬
‫‪ :statements‬هي جميع األوامر الموضوعة في الحلقة و هي‬
‫هنا قمنا بتعريف المصفوفة ‪//‬‬
‫;} ‪int[] numbers = { 1000, 2000, 3000, 4000, 5000‬‬
‫تتنفذ في كل دورة‪.‬‬
‫هنا في كل دورة سيتم تخزين ‪ numbers‬في المتغير ‪// element‬‬
‫قيمة عنصر من عناصر المصفوفة‬
‫)‪for(int element: numbers‬‬
‫{‬
‫هنا سيتم ‪System.out.println(element); // element‬‬
‫عرض القيمة التي تخزنت في المتغير‬
‫}‬
‫}‬
‫}‬
‫تعامل الدوال مع المصفوفات‬
‫سنتكلم اآلن عن نقتطين أساسيتين‪:‬‬
‫تمرير المصفوفة كـ ‪ argument‬للدالة‪.‬‬
‫تعريف دالة ترجع مصفوفة‪.‬‬

‫تمرير المصفوفة كـ ‪ argument‬للدالة‬


‫سنقوم بتعريف دالة تأخذ مصفوفة كباراميتر‪ ,‬مهمة هذه الدالة ستكون فقط طباعة جميع قيم عناصر المصفوفة‪.‬‬
‫ثم سنقوم بإستدعاء هذه الدالة مرتين‪ ,‬ألننا سنعلمك طريقتين لتمرير مصفوفة كـ ‪.argument‬‬
‫{ ‪public class Main‬‬
‫هنا قمنا بتعريف دالة تطبع محتوى أي مصفوفة نمررها لها كـ ‪// 1- argument‬‬
‫{ )‪public static void printArray(int[] array‬‬
‫{ )‪for (int i=0; i<array.length; i++‬‬
‫;)" " ‪System.out.print(array[i] +‬‬
‫}‬
‫}‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف مصفوفة ‪// 2-‬‬
‫;} ‪int[] numbers = { 1000, 2000, 3000, 4000, 5000‬‬
‫هنا قمنا باستدعاء الدالة و مررنا لها المصفوفة ‪// 3-‬‬
‫;)‪printArray(numbers‬‬
‫;)(‪System.out.println‬‬
‫هنا قمنا باستدعاء الدالة و أنشأنا مصفوفة بداخلها‪ .‬ستفهم هذا األسلوب في دروس الحقة ‪// 4-‬‬
‫;)}‪printArray(new int[] {11, 12, 13, 14, 15‬‬
‫}‬
‫}‬
‫تعريف دالة ترجع مصفوفة‬
‫سنقوم بتعريف دالة تأخذ مصفوفة كباراميتر و ترجعها معكوسة‪ ,‬ثم سنقوم بإستدعاء هذه الدالة‪.‬‬
‫ستالحظ أننا قمنا بتعريف عدادين في الحلقة ‪ ,for‬ألننا أردننا أن نلفت إنتباهك أيضًا أنه بإمكانك تعريف أكثر من عداد‬
‫بداخل الحلقة‪.for‬‬
‫{ ‪public class Main‬‬
‫هنا قمنا بتعريف دالة ترجع محتوى المصفوفة نمررها لها كـ ‪ argument‬بالمقلوب ‪// 1-‬‬
‫{ )‪public static int[] reverseArray(int[] array‬‬
‫;]‪int[] result = new int[array.length‬‬
‫{ )‪for (int i=0, j=result.length-1; i<array.length; i++, j--‬‬
‫;]‪result[j] = array[i‬‬
‫}‬
‫;‪return result‬‬
‫}‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بتعريف مصفوفة ‪// 2-‬‬
‫;} ‪int[] numbers = { 1000, 2000, 3000, 4000, 5000‬‬
‫هنا قمنا بتعريف مصفوفة فارغة‪ ,‬سنستخدمها لحفظ قيم المصفوفة ‪ numbers‬بالمقلوب ‪// 3-‬‬
‫;‪int[] reversedNumbers‬‬
‫هنا قمنا بتخزين المصفوفة المقلوبة التي سترجعها الدالة في المصفوفة ‪// 4- reversedNumbers‬‬
‫;)‪reversedNumbers = reverseArray(numbers‬‬
‫هنا بعرض قيم المصفوفة ‪ reversedNumbers‬للتأكد فقط ‪// 5-‬‬
‫{ )‪for (int i=0; i<reversedNumbers.length; i++‬‬
‫;)" " ‪System.out.print(reversedNumbers[i] +‬‬
‫}‬
‫}‬
‫}‬
‫التاريخ و الوقت في جافا‬

‫معرفة التاريخ و الوقت الحالي‬


‫;‪import java.util.Date‬‬
‫{ ‪public class Main‬‬
‫{ )‪public static void main(String[] args‬‬
‫هنا قمنا بإنشاء تاريخ و وضعناه في الكائن ‪// date‬‬
‫;)(‪Date date = new Date‬‬
‫هنا قمنا بعرض التاريخ الذي تم تخزينه في الكائن ‪// date‬‬
‫;) ‪System.out.println( date‬‬
‫}‬
‫}‬
‫دوال الكالس ‪Date‬‬

‫إسم الدالة مع تعريفها‬

‫‪1‬‬ ‫)‪public boolean after(Date when‬ترجع ‪ true‬إذا كان كائن الـ ‪ Date‬الذي قام باستدعائها يحتوي على تاريخ أحدث من تاريخ الـ ‪ Date‬الذي نضعه كـ ‪.argument‬‬

‫‪2‬‬ ‫)‪public boolean before(Date when‬ترجع ‪ true‬إذا كان كائن الـ ‪ Date‬الذي قام باستدعائها يحتوي على تاريخ أقدم من تاريخ الـ ‪ Date‬الذي نضعه كـ ‪.argument‬‬

‫‪3‬‬ ‫‪)(public Object clone‬ترجع نسخة ثانية من كائن الـ ‪ Date‬الذي قام باستدعائها‪.‬‬

‫‪4‬‬ ‫)‪public int compareTo(Date anotherDate‬تقارن كائن الـ ‪ Date‬الذي قام باستدعائها مع كائن الـ ‪ Date‬الذي نضعه كـ ‪.argument‬‬

‫‪5‬‬ ‫)‪public boolean equals(Object obj‬ترجع ‪ true‬إذا كان كائن الـ ‪ Date‬الذي قام باستدعائها يحتوي على نفس قيمة الكائن الذي نضعه كـ ‪.argument‬‬

‫‪6‬‬ ‫‪)(public long getTime‬ترجع عدد الـ ‪ milliseconds‬من تاريخ ‪ 1/1/1970‬إلى تاريخ الوقت الذي تم به استدعاء هذه الدالة‪.‬‬

‫‪7‬‬ ‫)‪public void setTime(long millisec‬تستخدم لتحديد الوقت إعتبارًا من تاريخ ‪ ,1/1/1970‬العدد الذي نضعه يمثل عدد الثواني بالـ ‪.milliseconds‬‬

‫‪8‬‬ ‫‪)(public int hashCode‬ترجع ‪ hash code‬لكائن الـ ‪ Date‬الذي قام باستدعائها‪.‬‬

‫‪9‬‬ ‫‪)(public String toString‬تحول قيمة الـ ‪ Date‬لقيمة نوعها ‪ String‬و ترجعها‪.‬‬
‫تمت حقيبة لغة الجافا للمتدربين‬

You might also like