Professional Documents
Culture Documents
حقيبة دورة لغة الجافا للمتدربين
حقيبة دورة لغة الجافا للمتدربين
إذًا الكود الذي تقوم بكتابته و الذي يسمى ,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لن يستطيع نظام التشغيل التعرف على لغة جافا .و بالتالي لن يستطيع تشغيل أي كود أو حتى
برنامج جاهز مكتوب بلغة جافا.
تجهيز بيئة العمل
في البداية ,سنقوم بتحميل إصدار الـ jdk 8بالتحديد ألننا بعد قليل سنقوم بتحميل برنامج Netbeansالمبني في
األساس لهذا اإلصدار.
اآلن قم باتباع الخطوات التالية:
إبحث في جوجل عن .jdk 8
أنقر على رابط أول موقع يظهر لك في نتائج البحث و سيكون الموقع من موقع Oracleكما يظهر في الرابط ألنها
هي من قامت بتطوير الـ .jdk 8
بعد أن تفتح الصفحة الجديدة ,قم بالنزول قليًال حتى تجد جملة .Java SE Development Kit 8
أول شيء عليك فعله هنا هو النقر على Accept License Agreementلكي يسمح لك بتحميل نسخة
من الـ .JDK
بعدها قم بالنقر على النسخة التي تتناسب مع حاسوبك حتى يتم تحميلها.
مالحظة :في حال كنت ال تعرف النسخة التي تتناسب مع حاسوبك ,قم بتحميل النسخة ما قبل األخيرة ألنها
تعمل على جميع أنظمة ويندوز.
}
}
في العادة الكالس األساسي في المشروع يتم تسميته Mainمع اإلشارة إلى أن هذا ال يعني أنك مجبر على تسميته
كذلك.
الكود الذي يتنفذ مباشرًة عند تشغيل البرنامج هو الكود الذي نكتبه بداخل حدود الدالة .)(main
سنتطرق إلى مزيد من التفاصيل في الدرس التالي.
في المثال التالي قمنا بإنشاء برنامج إسمه ,Mainموجود بداخل مجلد إسمه ,mainمهمته فقط طباعة
الجملة " "!Hello Worldعند التشغيل.
!Hello World
Javaأساسيات لغة جافا
بناء برنامج بلغة جافا
يمكننا تعريف أي برنامج مكتوب بلغة جافا على أنه مجموعة من الكائنات مرتبطة مع بعضها البعض بشكل
منطقي و متسلسل.
في هذا الدرس سنعطيك فكرة عامة عن بعض المصطلحات األساسية في لغة جافا مع اإلشارة إلى أنك
ستتعرف على كل مصطلح منهم بتفصيل في الدروس الالحقة.
المصطلحات األساسية في لغة جافا هي التالية.
الكالس )) Class
الكائن )) Object
الخصائص )) Instance variables
الدوال )) Methods
مفهوم الكالس
الكالس عبارة عن حاوية كبيرة تستطيع أن تحتوي كل الكود من متغيرات و دوال و كائنات إلخ..
مفهوم الكائن
الكائن عبارة عن نسخة مطابقة لكالس معين.
بما أن الكائن عبارة عن نسخة من الكالس ,يمكننا القول أنه ال يمكن إنشاء كائن إذا لم يكن هناك كالس.
إذًا في مفهوم برمجة الكائنات نقوم بإنشاء كالس معين يسمونه blue printأي (النسخة الخام أو النسخة األصلية) ,و
بعدها ننشئ نسخة أو أكثر من هذا الكالس و نفعل بها ما نريد بدون أن نغير محتويات الكالس األساسي و هكذا نكون
حافظنا على كودات الكالس األساسي ألننا نعدل على النسخ و ليس عليه مباشرًة.
الفكرة األساسية في برمجة الكائنات أنك تقوم بتقسيم البرنامج الواحد إلى عدة كالسات ,و كل كالس يتم برمجته لتنفيذ
ناحية معينة في البرنامج.
بعد اإلنتهاء من كل أقسام البرنامج الموجودة في عدة كالسات ,نقوم فقط بإنشاء نسخ منهم في المكان الذي نحتاجهم فيه.
و بذلك نكون جمعنا كل الكالسات التي كتبت بشكل منفصل و ربطناهم مع بعضهم و كأننا كتبناهم في كالس واحد فقط.
مالحظة :الكائن هو نسخة من الكالس و ليس نسخة من الملف الذي يحتوي على الكالس.
كما أن الكالس األساسي يتم إنشائه بدون إعطاء قيم لمتغيراته و سنرى في دروس الحقة كيف أننا نغير قيم
الكائنات و ليس قيم الكالس األصلي مباشرًة.
مفهوم الخصائص
كل كائن ننشئه من كالس معين يملك نسخة خاصة به من المتغيرات الموجودة في هذا الكالس .المتغيرات التي يتم إعطاء
نسخة منها لكل كائن من الكالس هي ما تسمى بالخصائص ,مثال:
إذا كان عندنا كالس إسمه Harmashيحتوي على متغيرين xو ,yو أنشأنا منه كائنين ,الكائن األول إسمه Aو الثاني
إسمه .B
هنا سيكون كل كائن يحتوي نسخة خاصة من األشياء الموجودة في الكالس .Harmash
سيملك الكائن Aنسخة خاصة به من المتغيرين xو yال عالقة للكائن Bفيها.
و سيملك الكائن Bنسخة خاصة به من المتغيرين xو yال عالقة للكائن Aفيها.
مفهوم الدوال
الدالة ( أو الميثود ) عبارة عن كود جاهز يتنفذ فقط عندما تقوم بإستدعائه
مالحظة :في البرامج الحقيقية ال يتم تعريف جميع الدوال في الكالس األساسي في المشروع و
الذي يسمى .Main Classبل يتم تعريفهم في كالس ثاني أو أكثر من كالس و عند الحاجة
يتم إستدعاءهم.
مبادئ كتابة الكود في جافا
Case Sensitivity
Case Sensitivityتعني أن لغة البرمجة تميز بين األحرف الكبيرة و األحرف الصغيرة.
جافا تعامل األسماء التي نستخدمها بتأني سواء للمتغيرات ,الدوال ,الكالسات ,الكائنات إلخ.
مثال note :و Noteليسوا شيئًا واحدًا.
بينما في لغات برمجة أخرى مثل HTMLال يهم إذا كانت األحرف كبيرة أو صغيرة.
مثال note :و Noteو NoTeو NOTEهم شيئًا واحدًا.
إسم الكالس
دائمًا إبدأ إسم الكالس بحرف كبير.
مثال.class First :
إذا كان إسم الكالس يتألف من أكثر من كلمة ,إجعل أول حرف من كل كلمة كبيرًا.
مثال.class FirstJavaClass :
إسم الدالة
دائمًا إبدأ إسم الدالة بحرف صغير.
مثال.)(public void display :
و إذا كان إسم الدالة يتألف من أكثر من كلمة ,إجعل أول كلمة تبدأ بحرف صغير و جميع الكلمات التي تليها
تبدأ بحرف كبير.
مثال.)(public void displayUserInfo :
النتيجة
النتيجة
;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في اللغة اإلنجليزية ,و هي عبارة عن مجموعة أوامر مجمعة في مكان
واحد و تتنفذ عندما نقوم باستدعائها.
كما أن جافا تحتوي على مجموعة كبيرة جدًا من الدوال الجاهزة التي يمكنك إستعمالها مباشرًة و التي سنتعرف
إليها في دروس الحقة.
Bitwise AND & a&b bو aالمشتركة بين bitsالعامل & يحسب ناتج جمع الـ
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
إسم العامل رمزه مثال شرح الكود
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
أنواع الحلقات
طريقة إستخدامها
) decrementأو for( initialisation; condition; increment
{
// statements
}
) 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");
}
}
}
طريقة تعريفها
يمكننا تعريفها بعدة أشكال ,الشكل األساسي هو التالي:
{ )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
\n يجعل المحتوى الذي يأتي بعدها ينزل على سطر جديد.
)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 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 هنا سترجع
}
}
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 );
}
}
مفهوم المصفوفات
مصفوفة :تعني 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
بما أن المصفوفة تتألف من 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); //
}
}
مثال شامل حول التعامل مع المصفوفات
: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للدالة.
تعريف دالة ترجع مصفوفة.
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و ترجعها.
تمت حقيبة لغة الجافا للمتدربين