تعليم لغة الجافا java الدرس 14

السلام عليكم ورحمة الله وبركاته 

ان شاء الله هنتكلم عن درس مهم جدا ومن وجهة نظرى المتواضعة يعنى ان الدرس دا اهم درس وهو مش كود هنتعلم نكتبة بس احنا هنعرف ازاى المتغيرات والحجات بتاعتنا بتتخزن ازاى فى الميمورى ودى حاجة مهمة جدا وبتفرق مبرمج من مبرمج اخر فلازم ان شاء الله نفهم الكلام دة كويس وهو كلام سهل جدا وان شاء الله كلنا هنعرفة نبطل كلام بقى ونبدا على طول ونقول بسم الله..
احنا كنا قلنا قبل كدا ان فية نوعين من data types وهما primitive and non primitive data types وكنا سمينا ال non primitive دى باسم reference او اسم object data types ان شاء الله احنا عاوزين نعرف بقى (الجديد يعنى) المتغيرات دى ببتتخزن فين وازاى بيتعامل البرنامج معاهم.

[mark=#FFFFCC]عاوزين نقول بردة ان ال reference data types دى عبارة عن 
• string
• user defined class
• java framework classes[/mark]

عاوزين نعرف يعنى اية reference بس الاول لازم نعرف ان كل برنامج لة memory 
بس يعنى اية memory؟ 
علشان نعرف يعنى اية memory لازم نعرف الفرق بين ال ram وال memory ؟

اولا ال ram دى حاجة كدا هاردوير يعنى بنمسكها بادينا وكمان احنا اللى بنشتريها ودى من os resourses يعنى بتفرق فى امكانيات الجهاز وكدا يعنى وكمان نعرف ان ال ram دى مؤقتة يعنى هيا بيبقى فيها بيانات ومعلومات لكن لما الجهاز بيطفى المعلومات دى بتروح على طول يعنى هيا ذاكرة مؤقتة.

ثانيا ال memory : اول لما الجهاز بيبدا يشتغل بيتم تحميل ال os فبياخد ال ram ويقسمها الى مجموعة من ال memories وكل process او برنامج بياخد memory من دول وبيشتغل فيها .
يعنى احنا من الاخر عاوزين نقول ان كل برنامج لة ال memory الخاصة بية اللى بيتنفذ فيها.
Every process(program in execution time) have it's own memory.
وعاوزين نقول بردة ان ال ram بتتقسم الى مجموعة من الmemories وبردة دا يعنى اننا سوف نتكلم عن حجات logical يعنى منطقية مش physical حجات مش بنشوفها.
بردة فية حاجة مهمة عاوزين نعرفها بردة وهيا ال life cycle of the computer
اول خطوة لما بنشغل الكمبيوتر يعنى بنعملة power on فبيقوم ال Bios (basic input output system) وبيعمل فحص لكل اجزاء الهارد وير check in the hardware وبعد كدا بيجى دور حاجة اسمها Mbr (master boot record) وهو بياخد ال control من ال Bios وبيعطية لل os .
وعاوزين نقول ان ال bios بيبقى موجود على ال rom لانة لازم يكون موجود طول الوقت طول ما الجهاز شغال علشان بيتاكد ان كل اجزاء الهارد وير شغالة تمام وعلشان كدا مش بيتحط على ال ram .
وبردة نقول ان ال MBR دى بتبقى موجودة على hard disk .

[mark=#00FFFF]ندخل بقى فى المهم وهو ان ال ram دى بتتسقسم الى نوعين heap وstack [/mark]

اولا ال :heap ودى بقى بنحط فيها ال objects وكل object داخلها بيبقى لة life time خاص بية بمعنى انة بيفضل موجود جواها لفترة معينة ثم بعد ذالك لو محدش استخدمة بيجى حاجة اسمها 
GC (garbage collector)وبيطلعها برة . اى object بيدخل جوى ال heap بيدخل من خلال كلمة new يعنى معنى كدا ان اول لما عنيا تقع على كلمة new اعرف على طول ان فية object جديد وان مكانة هيبقى فى ال heap .

ثانيا ال stack: دا بيشيل اى حاجة ماعدا ال objects فهو بيشيل reference variables + primitive data types بس الى primitive data types لازم يكونوا local variables يعنى مكتوبة داخل ال main method ودل بيطيروا اول لما الscope بتاع ال method بتاعتهم يخلص 
ال reference variables بيشاور على objects .
ال heap بيعيش فترة اطول من ال stack .
هناخد مثال نعرف منة ازاى المتغيرات بتتخزن فى ال stack وال objectives بتتخذن فى ال heap 



حصرياً منتديات ستار شباب سلسة حصرياً منتديات ستار شباب سلسة

عاوزين نعرف بقى ازاى المتغيرات والكائنات دى بتتخزن فى الmemory 
هنا اول حاجة كل المتغيرات اللى من نوع double و int دول هيتخزنوا فى ال stack لانهم local primitive data types اما ال string و ال Scanner object فدول بيتخزنوا فى ال heap وكمان احنا لما بنخزن ال string والScanner دول فى ال heap فا احنا بنعطيهم عنوان reference داخل ال heap ونحط العنوان دة فى ال stack ولما نيجى نستخدمة ننادى على العنوان دا ونوصلة من خلالة كما فى الصورة




فية عندنا شيوية ملاحظات هما 
ال null دايما هو ال default value لل reference variable مثال String[]args .
ال new دائما ترجع بreference .
ال String تعامل معاملة ال object .
ناخد مثال تانى علشان العملية توضح شيوية كمان


حصرياً منتديات ستار شباب سلسة حصرياً منتديات ستار شباب سلسة

ودا اللى بيحصل داخل ال memory
وهنا بقى هنحط المتغيرات اللى من نوع int فى ال statck اما الكائنات Scanner فهنحطهم فى ال heap 
فاول لما البرنامج هيبدا هيدخل على دالة الmain فهياخد ال args ويحطها فى ال stack وبعد كدا هيلاقى متغيرات من نوع int هتتتحط بردة فى ال stack لكن لما يلاقى الobject اللى اسمة Scanner فيحطة فى ال heap بس هيحط ال reference بتاعة فى ال stack اللى هو 0xf2ab علشان يشاور علية اللى بتحصل
ودى الصورة الى بتوضح الكلام دة




وهو لما يلاقى استدعاء ال add method داخل دالة ال main فهيروح نازل منفذها وطالع تانى دالة الmain فهيعرف المتغيرات اللى جوة الadd method فى ال stack ويمرر لها المتغيرات بقيم الx,y اللى هما هنفرض ان هما فى الحالة دى x=5 and y=7 وبعد ما يخلص عملية الجمع هيرجع بالناتج تانى ويحطة فى الz فى ال stack .
ولما يرجع الى ال z يبقى فى الحالة دى هيشيل قيم المتغيرات بتاعة ال x,y اللى فى ال add method وبعد كدا لما يعطى قيمة ال z لها هيشيل قيم ال x.y اللى موجودين فى ال main method لحد ما ال stack تفضى خالص خالص علشان كدا قلنا ان ال stack عمرها اقل من ال heap .


الإبتساماتإخفاء

تعليم جافا
علوم و تقنيات