بسم الله الرحمن الرحيم الحمد لله والصلاة والسلام
على رسولنا اليوم ان شاء الله هنبدأ بأول موضوع في
الـ advanced programming بالنسبالنا بعد ال object
oriented ال exception handling أو معالجة الأخطاء
لما أنا بتكلم أو المصطلح exception قاعد باتكلم على
إشارة على إنه صار في عندي مشكلةأثناء تنفيذ
البرنامج أو احنا بنسميها أحيانا ال run-time error
يعني أنا قاعد بأتكلم أن الخطأ هذا بعيد عن ال
syntax code يعني أنت كتبت ال code تبعك و ال
compiler قالك ال code صحيح 100% اروح نعمل
execution تنفيذ هذا البرنامج أثناء ال run صار في
عندي مشكلة في البرنامج ووقف البرنامج طبعا لما أنا
بجي بتكلم exceptionمعناته بالعربي استثناء الحالة
اللي صارت هذه مش هي الحالة الأساسية تبع برنامجك
والدليل أنه كان من ناحية code تمام ال exception
هذه إما مفادها خطأ منطقي في تنفيذ ال code تبعك و
طبعا قلنا compiler مش هتيجي لكن في الآخر هي
المفروض infrequent error الخطأ هذا مش هيظهر كل مرة
الخطأ هذا مش هيظهر كل مرة طيب الآنلما انا اتكلم
على exception handling معناته البرنامج بيقدر يكمل
بعد ما اتصار الخطأ يعني في الوضع الطبيعي في الوضع
الطبيعي اي exception بيظهر في ال run-time run-time
error يعني البرنامج بده يقفالبرنامج بدي يقف لكن لو
أنا فعليا مهيئ برنامجي انه يتعامل مع الأخطاء او
يتعامل مع ال exception او الاستثناءات اللي بدها
تصير في ال one-time ومجهز نفسي ايش اللي ممكن يطلع
بقدر اتحكم في برنامجي واخلي برنامجي يظل شغال اخلي
برنامجي يظلشغّال طبعا طبعا البرنامج اللي احنا
بنقول عنها robust او fault tolerant programs هي
برنامج قوية برنامج قوية او مضمونة نركز عليها بحيث
انه تقدر تتعامل مع الأخطاء في ال run-time لو صارت
برجع و بأكد لو ال code free احنا بنتكلم على free
error طبعا run-time error أثناء التنفيذ صار في خطأ
في التنفيذ مش في البرنامج لأن لو في خطأ في ال code
هيكون compilation error وبالتالي البرنامج مش هيشغل
أساساً ال exception are thrown عادة لما بنجي نتكلم
على ال Java program بالتحديد هي في عندي ال Java
code اللاير الأولى وهنا انت مسئوليتك في عندي ال
Java virtual machine هذا اللاير التانيوهذا ليس
مسئوليتك بالمرة وفي عندك الـ Operating System
وبرضه هذا ليس من مسئوليتنا، تمام؟ الخطأ في الـ
Runtime On بيصير طبعا بعد ما احنا عملنا
compilation وكان صحيح 100% الآن الـ Java Virtual
Machine بتمسك البرنامج بتحوله للغة القالة وبتقول
ال Operating System اتفضل بما يفهمه ال Operating
System الآن أثناء التنفيذ لو صار في عندي خطأالـ
Java Virtual Machine قبل ما تاخد قرار إنها تعمل
Terminator للـ Application بتروح تعديني إشعار إنه
صار فيه خطأ يعني بترجع للبرنامج تبعي في الـ
Runtime إشعار إنه صار فيه خطأ معين الآن الإشعار
هذا إذا برنامجي جاهز يستقبلهويحلله وياخد action
تبعا له بيكمل الشغل الإشعار هذا بعتتلي ال Java
Virtual Machine وانا ماردتش عليه او مستلمتهش
الفاضي الحل ان ال Java Virtual Machine هتروح تعمل
terminate لل application تبعتنا واضح السيناريو
عندما تبعت ال Java Virtual Machine الإشعارأخلق ..
هو .. هو .. وين صار الخطأ؟ صار الخطأ عند الـ
Operating System لأن الـ Execution .. الـ
Execution هان الآن الـ Execution .. ال .. ال
Operating System قال فيه مشكلة الـ Java Virtual
Machine ردتها للـ Application تبعي هل الـ
Application الآن قادر يتعامل مع الإشعار .. إشعار
الخطأ هذا ولا لأ؟ بين جسين، جادر ياخد decision
ويكمل؟إذا أنا مش مهيئه إذا أنا مش مهيئه فبالتالي
الـ java virtual machine هتعمل terminate هتقول لل
operating system terminated خلاص أنا مابقدرش أعمل
response مع ال action أو مع الحدث اللي صار
استلام الإشعار ومعالجة الـ exception هذه مسئولية
من؟ مسئوليتك أنت كـ developer مسئوليتك أنت كـ
developer لماذا؟ لأن المفروض أنك أكثر واحد بيعرف
خبايا البرنامج يعني و بنقول بالمثال البسيط أنك لما
تروح تريد أن تسلمي assignment للأستاذ أو للمحاضرة
بغض النظر و أنت تكون عارف هل البرنامج شغال 100% و
لا نص نصليش؟ لأنك انت الكاتبان أو انت اللي جايبها
من زميلتك أو اللي انت جايبها من النت او او الاخري
بسوط انا لأ و بالتالي .. بالتالي انت اكثر واحدة
تفهم البرنامج هذا صح و عارفة وين خبايا الآن اضربت
مثال عند الشباب قبل شوية في مصانع أو في تصنيع
السيارات تصنيع السيارات عندهم ال trends او نسميهم
التوجهات حسب الأسواقيعني السيارة اللي تتصمم
لأوروبا غير السيارة اللي تتصمم للشرق الأوسط تمام
السيارة اللي مثلا اللي في مصر ممكن تكون غير
السيارة اللي تتصمم للسعودية ليش؟ لأننا نتكلم على
أجواء حارة أو أجواء مختلفة حتى الطرق ممكن تكون
مختلفة وبالتالي صاحق أو مصنع السيارة عامل حسابه
لكل التفاصيل هذه نظام التبريد بالسيارة نظام
العدلات المستخدم إلى آخر كل الشغلات هذهفبنفعش أنا
أجي في لحظة من اللحظات كإيد الشامي أقول والله
السيارة السيارة المفروض المصنعة لبلد للسويد بيدورح
أجيبها و أشغلها عندها في غزة ليش؟ لأن أجواء غزة لا
تتلقم أو مبردات السيارة أو مواصفات السيارة لا
تتلقم مع طبيعة الأجواء اللي أنا جايبها مين اللي
بيقدر ياخد decision يقول ليه بينفع ولا بينفعش؟اللي
صنعها لأنه عارف كل شغلة بتمشي ولا بتمشيش طيب، احنا
هالنفس الكلام انت اللي مسؤول عنه البرنامج هذا
الالترون هذا أو الإشعار اللي بديجيكي بالـ
exception اللي صار فيه معلومات كمان بنسميها احنا
stack trace فيه معلومات معلومات عن إيش؟ عن ال
exception إيش سبب الخطأ هذا؟ إيش هو الخطأ؟ وإيش
سببه؟ وأي سطر في ال code اتسبب بالخطأ اللي موجود
عندهم؟من المعلومات هذه أن name of exception اسم
الخطأ يعني الأخطاء اللي بتصير في ال run-time
معروفة معروفة أشي تكون هنا وفي نفس الوجهة بتديني
ال method call stack أنا الآن طبيعت برنامجي ممكن
يكون بيعتمد method على method على method يعني
بيعمل callingمن ضمن الـ stack trace هذه المعلومات
كل الـ method والاستدعاءات تبعتها بالـ Hierarchy
اللي صارت اللي نسميها ال stack الكلت stack لحد ما
يوصلني لـ method الأخيرة في السطر الفلاني صار في
عندي خطأ و هنشوف عندنا مثال عملية مع بعض وبالتالي
أنا بقدر استفيد مباشرة بشكل كويس من الـ throne أو
من الإشعار اللي بيوصلني عشان أتعامل مع الأخطاء
اللي موجودة عندهابالنسبة بال Java بالنسبة إلينا
بال Java فهي كل ال exceptions presented by classes
وبالتالي أنا بصير دكتور عالم ممل يعني هيك الإشعار
اللي بدي يجيني هو عبارة عن object object من class
الإشعار اللي بترد ليه ال Java virtual machine لل
application تبعي أو لل program تبعي عبارة عن
object طيب وكل ال exception هذه أو كل classes هي
عبارة عن sub classes أو derived من ال throwable
derived from throwableالـ Hierarchy تبعت الـ
exception هيها نقول
لك كلهم derived من مين؟ من الـ throwable في عندي
exception وفي عندي error لما أنا بتكلم على error
بتكلم على خطأ برنامج مالوش دخل فيهيعني هيك أن الـ
instructions تبعت صحيحة 100% الـ Java Virtual
Machine لما عملت Analysis لها و بعتتها لل
operating system الكلام كان صحيح 100% لكن ال
operating system افتقر أو ماقدرش يروح مثلا يرسم ال
button على الشاشة بشكل كويس أو ماقدرش يحدد أو يحط
ال button في المكان المحدد على الرغم انه available
فهذا الخطأبعيد عن برنامجك فهو مش من مسئوليتك انت
تعملي ليه handling وغالبا لما بتكلم على error لازم
البرنامج نعمله terminate خلاص إنه صار في عندي
error مش أنا مسئول عنه كبرنامج ممكن ال operating
system مش قادر يعمل allocation ل memory معينة
memory cell وبالتالي قرر يعمل termination ال
process أو ال thread اللي كنت أنا شغال عليها في
malware على ال system وراح يعمللها kill فهذه
الأخطاءمش من مسئوليتنا احنا كـ Programmer أو كـ
Developer طيب في المقابل في عند الـ exceptions
اللي هي بتكون ناتجة عن ال program activity عن نشاط
برنامجي مثلا علمونا في الرياضيات سالب واحد تحت
الجذر عملية غير معرفة مصبوط؟ كذلك لما بدأت أجسم
على صفر برضه عملية غير معرفةالان هدف الـ syntax
يعني لو انا جيت هيك و قلتله انا في عندي integer I
equal ناقص واحد و قلتله double X equal square root
لل I math dot square root لل I syntax صحيح مية في
المية لكن في ال runtime في error ناتج عن برنانجيهي
Error ناتجة عن برنامجي لأنه رصدنا في عندي
Undefined Value كذلك لو أنا جسمت على صفر في الحالة
هذه في الحالة هذه أنا لازم أنتبه أو برنامج يكون
جاهز يحل هيك مشكلة عشان برنامج يكون قوي لازم يكون
جاهز يحل هيك المشكلة والأمر بسيط جدا بما أن ال
system أو ال Java Virtual Machine هتبعت الإشعار
بالخطأ أنا بقدر أخد الخطأ هذا أجهز نفسي للخطأ هذا
وأتعامل معاه طيبيعني احنا الان بنتكلم على error و
exception ال error بعيد عن ال control طبعا احنا
مالاش ندخل فيه احنا بنتكلم على ال exception في ال
exception هان حسب ال hierarchy انا عندي نوعين في
عندي ال input output exception وهذا لما انا بأرتبط
في أي شغلة بعيدة عن البرنامج مثل قراءة ملفعفوا،
الكتابة على ملف، الاتصال بالإنترنت أو بالشبكة،
بتستخدم URL عشان مش عارف إيش، كل الشغلات هذه لها
علاقة بال input و output exception، بدي أطبع على
الطابع و مش جادر أو مش واصل للطابع أو ما شابه، إلى
آخرينالـ runtime exception أنه أنا أثناء تشغيل
البرنامج صار في عندي بعض الأخطاء اللي ممكن توقف
البرنامج مثل الـ casting إيش ال class casting؟
يعني أنا في عندي integer integer
X عندي integer X وعندي string شوية لأن اللي حالتها
شوية خاصة في عندي string تمام؟y equal hello بنفع
أروح أقوله x equal مش
هي cast؟ مصبوط، بنفع هذا الكلام؟ ليش؟ لأنه ال data
مختلفة تماماً طيب، هل أقلت بنفع أحط integer في
double أعمل casting؟ أه، بنفع، بنفع طيب لو العكس؟
الـ value والـ size تبع ال data يعني مانفعش أحطه
في integer لكن مانفع أحطه في long مانفعش أروح أخد
والله ال ال .. اللهم صلى الله عليه و سلم يا محمد
ال big sizeيعني مثلا نجي نقول والله عندى رقم اتنين
مليون وسبعة مية وخمسين ألف ومية ومش عارف كدهش
واروح بده أحطها في short طبما هي معروفة ال maximum
value تبعتها وبالتالي أنت عملك تعمل exceeding لل
value وبالتالي عملية ال cast تبعتناها مبتمش
وبالتالي لما أنا بتكلم على ال casting معناته لازم
يكون في عندي setup أو في عندي شكل أو بآخر اتنين
بيتقابلوا في مرحلة معينة عشان أقدر أعمل عليها
casting فضلي
لما ايش بتساوي تقوليله integer x equal 1.2 دي مش
هيك موقفين بمعرفة integer ومعرفة double طيب اه لإن
مجرد تقوليله هيك هاي double y equal واحد ونصX
equals Y هك انت بتقول ايه؟ هك الطبيعي Error Two
different data types بس لما أنا بدي أدخل موضوع ال
casting بيفرج وطبعا ال casting بعيد عن ال
primitive data أوضح الآن تعالي نتكلم تتذكر ال
employee كان في عند ال full-time employee وفي عند
ال part-time employee مظبوط؟
البيانات الرئيسية الـ ID والـ Name موجودة فوق هنا
الـ Hire Date والـ Grade وهنا
في عند الـ Working Hours ساعات العمل والـ
Hour Rate مظبوط؟
تخيل أنت الآن أنا عندي .. عنديobject من الـ part
-time و بدى أخزنه بالـ full-time بينفع؟ بينفعش
بينفعش بس بينفع أخزنه وين؟ في ال employee ليش؟ لأن
العلاقة بينهم is a subclass وبالتالي لازم يكون في
علاقة ما بين ال two objects لما أنا بدى أفكر
بعملية ال casting بغير هيك دائما حكون في عندك خطأ
في ال castingطيب، ننتقل للنقبة اللي بعديها الآن من
الـ exception في الـ runtime اللي في عندي null
pointer exception أنا قاعد بقرأ الـ data و بحللها
من الملف في لحظة لما قرأت رجعتلي null، فاضي أو
أجيت و أنا أثناء بقرا في ال array أنا معرف ال
array خمس عناصر integer خمسة وروحت وقلتله a of
خمسة equal سبعة، صح؟يعني انا اشي قلتله انتجار a
بيتساوى new انتجار خمسة ايش هدى؟ معناه ان هدى عندى
اعلى index اربعة وفي لحظة من اللحظات اللي جيت
قلتله f خمسة equal سبعة يعني
انا قاعد بدي عنوان او indexمش موجود أصلا فهذا
exception الآن ولا عمره البرنامج في ال compilation
حدك على هذا error ليش؟
لأنه هذا من ناحية syntax صحيح لكن في ال runtime
أنا فيه عندى مشكلة وبالتالي هذه الأخطاء اللى لازم
أنتبه للتعامل معاها ال
array index out of bounds لما بكون انا بحاول اعمل
access ل elementبعد جبل أو بعد ال array اللي
موجودة عندهم يعني بيبدأ ال index من صفر اروح أقوله
a of سالب واحد او اروح أقوله a خمسة او an اللي هو
اعلى انه ال index تبعتي ال casting لما يكون في
احاول بعمل casting ومافيش is a ك relation موجودة
بين ال two objects و null pointer exception لما
انا في الآخر ترجع ل null value بدل object انا مش
متوقع ان احللها طيب
ما هو عشان انت مش قادرة تعرفي ايش السبب او ايش ..
كيف تتعامل مع ال error اللي صار عندك و كان لان انا
لو انت بتقرأ من ملف على سبيل المثال و رجعلك null
المعناته اما في صدر فاضي في نص الملف في نص ال text
file اللي عندك و انا بدي اتحاول تشوف كيف ممكن
تستمريأو ممكن تكون في عندي والله ماعرفش ان القيمة
مش معملها initialization وانا أخدتها و بحاول ايش
بعمل لها parsing او بحاول اتعامل معاها فانت هان
ضروري تكون فاهم ال code تبعك حسب ايش البرنامج اللي
بتشتغل عليه طيب تعالى نجرب البرنامج البسيط هذا
اللي هيظهر فيه ال exception انا هان عامل class
Exception وعمل فيه main فاضي مش فيه حاجة بدأ اشتغل
فيه كتالي او بدأ اكتب فيه code و code بسيط جدا ال
code هذا عشان اشوف الخطأ او ال exception كيف بده
يظهر هاي
integer x equals 7 وهي كمان integer y equals 2 وهي
في عندى double
الـ result equal x على y و بدي أروح أقوله هان و
أطبع ليه اللي هي ال result من ناحية code لأن ال
code صحيح 100% ولا لا في أي مشكلة؟ لأ واحدة تقول
يا أستاذي أنت معرف double هان و بتجسم على integer
و هي أساسا انها integer و هيتخزن integer فنعمل run
Okay تلاتة منطق واحد يقول تلاتة و نص وراحت انتجار
مع انتجار فال result انتجار وبالتالي من البداية من
البداية انا ماعنديش مشكلة في الجسم تمام لو انا
اجيت و بدلت التنين هاد بصفر و انا شغلت البرنامج
هيظهر ال error اللي احنا بنتكلم عليه ظهر الخطأ
اللي احنا فعليافي الـ runtime لأن هذا الخطأ قبل ما
يظهر عندي على الشاشة تمام ال operating system رجع
إلى ال virtual machine ال virtual machine عمل
تثرون لل application هذه في خطأ مافيش handing عمل
terminate لل application وجملة الطباعة هذه ما تمتش
تمام احنا بدنا نطلع من هناOkay هذا هو البرنامج بكل
بساطة اللي انا كنتش اعمله اللي انا عشان اعمل
handling للخطاء اللي موجودة عندى بيلزمني مجموعة من
المفاهيم اول حاجة ال block احنا قبل شوية قلت لما
انا ال virtual machineتعمل الـ throne الـ
exception المفروض البرنامج التابع يكون قادر يمسك
الـ announcement الـ announcement هذا أو الـ
throne أو الـ exception هذا يعني قبل ما .. قبل ما
.. كمان مرة الـ virtual machine قبل ما بتوقف
البرنامج بتقوله هاي في خطأيعني بترد للبرنامج أهي
أن في خطأ بتتعامل معاه إذا بتعامل معاه بيعمل بكمل
execution غير هيك لأ عشان أتعامل مع الخطأ هذا
بيلزمني أتعامل أو في البداية أفهم أو أستخدم try ال
try هي عبارة عن ال block اللي المفروض تحتوي ال
code اللي ممكن يظهر من خلال الخطأ نرجع بشكل سريع
على البرنامج هذاهي البرنامج طبعا البرنامج بين هذا
و اللي أنا كتبته طبعا هذا كمان جربته سابقا انه
هنترك للمستخدم يدخل القيم تمام؟ هل في .. وين ممكن
انا احط او وين الخطأ اللي بدي أظهر عندي؟ ممكن انك
تدخل القيم و تدخل القيارات اه okay وبالتالي انا من
البداية ماعملتش validation على القيم المدخلة خصوصا
لما اتكلمت على denominator او ال divisorما دورتش
.. يعني ما فحصتش إن هو دخل صفر أو لأ عشان أقوله
بينفعش يدخلها مرة تانية طبعا هذه الطريقة صرت أنا
بأمنع ال error لا يظهر أساسا مش أنا بتعامل مع ال
error أنا بأمنعه لا يظهر من البداية لكن فعليا ال
statement الوحيد اللي بتطلع ال error هاي اللي هي
عملية القسمة يعني الخطأ فعليا لو أرجعنا هنا بشكل
سريع لل code اللي عندنا
في ال trace exception
ان ال thread من البرنامج الاساسي اللي حصل فيه عنده
خطأ هي نوعه arithmetic exception ال text تبعته
divided by zero divide قسم هاي when at exceptions
اسم ال class اللي عندي dot ال main method
exceptions.java الى اسم الملف كولون سطر رقم تسعة
وبالتالي بتديني تفاصيل واضحة عن ال error اللي صار
try
وبالتالي ال code اللي بده يحط في ال try اللي ممكن
يظهر الخطأ هو اللي حطه في ال try طبعا حط كل
برنامجي في ال try بينفع؟ أه بينفع بس بدك تفهم شغلة
في داخل ال try
لو افترضنا ان انا في عندى مجموعة من الأسطر وصار
الخطأ في السطر الرقم تلاتة بمجرد ال exception صار
هنا هيطلع براالـ try خلاص اللي جوا ال try هذا مش
هيتم تنفيظه عشان هيك مش صح تحط كل ال code في داخل
ال try مش صح تحط كل ال code في داخل ال try وإن
حطتي وإن حطتي دلالته واحدة فقط ان انت فعليا مش
قادر تعمل handling صح او مش فاهم برنامجك صح طيب
التانية catchوهو block بده ينخط تحت ل try مباشرة
يعني try catch
catch لإيش؟ احنا قبل شوية اتكلمنا على method بدها
تستلم تستلم ال announcement أو الإعلام لل java
virtual machine مين مسئولته؟ try استلمناها مين
اللي بده يفصف صلقان ويفهم إيش المحتويات؟الـ Catch
حسب الهيكلية السابقة لازم أنا أقوله لو كان هذا
الخطأ اللي صار arithmetic exception إيش بدي أخد
قرار؟ إيش بدي أعمل execution؟ لاحظي في ال code في
الأول كان
لما بظهر ال error بدون ال catch ال trial catch في
برنامج تبعيdrop خلاص بنعمله terminate طب لو أنا
عملت try و catch بقدر أكمل في بعض أو في بعض ال
code .. بعض ال code عفوا بعض ال code اللي موجود
عنده بعض ال catch طيب finally الآن ال finally هو
عبارة عن optional block بده ينحط بعدطبعا بالمناسبة
مافيش اي separator اي سطر of code بين ال try و بين
ال catch لأنه ممكن في داخل ال code تبعك تكتب اكتر
من try block فال catch تبعتها لازم تكون وراها
مباشرة طيب ال finally ال finally ال block as
optional بدي يكون بعد بعد ال catch في ال structure
ومهمته انه ينفذ اي codeتنفذ الـ code اللي موجود في
الـ finally سواء ظهر error ولا ماظهرش ان عمله
catch ولا ما عمللهوش بده يروح ينفذ اللي في الـ
finally ويطلع بعد هيك من البرنامج ال throw لما
احنا بنفكر نعمل generate لل application أو
generate عفوا لأي exception احنا بدناها يعني بده
اخل ال system هو اللي يعمل برنامجي هو اللي يعمل ال
throw لل exception مش ال java virtual machine طيب
وبالتالي لما انا بتكلم عن الـ exception handling
معناته انا بدي امسك الـ standard exceptions عشان
ارد على الأخطاء اللي بتصير أثناء برنامجي تمام؟
وامنع ان ال system ينعمله crash او ينعمله exit او
abnormal exit
وبالتالي اي exception من عمل الـ throne لازم امسكه
مين اللي بيعمل ال .. اللي بيعمل erase بشكل صحيح
لما انا شايف بقوله ايش قاعد بقوله لـ Java من خلال
الـ try انتبه هذا السطر هو اللي هيعمل الـ throne
هيعمل exception فأي message بتجهي منه
عشان تتفحص إيش ال action اللي بدك تاخديها طيب لو
أنا البرنامج تبعي عملت try و catch وظهر exception
أنا مش جادر أمسكه إيش بيصير؟ هو كأن ال try و catch
عالفاض مش موجودات وبالتالي بيعمل abnormal exit أو
terminate لل block اللي موجود عندها بس طبعا
البرنامج تبعي عمل try و catchإذا في try و catch و
finally قبل ما بعمل exit بروح بنفّذ وين اللي في
الـ finally بشكل عام ال try و ال catch بالشكل هذا
و ممكن أنا أستخدم أكتر من catch خلينا نروح نبدأ
نشتغل بعض ال code العملي مع ال try و ال catch على
المثال اللي احنا اشتغلنا عليها وين
الجملة اللي فيها error هي الجملة القسمة هي try
وبدأ أخلّي جملة الطباعة تبع القسمة هي موجودة معاها
أيضًا صار في عندي try مباشرة قاللي لـ try هد عليها
error بدها catch هاي catch نوع ال error اللي عندي
arithmetic exception
E ممكن أنا أروح أساوي أقول له ال object هذا لأنه
قبل شوية قولنا فيه ال stack مصبوطprint stack trace
وهذه الـ method بتطبع التفاصيل اللي احنا شايفينها
تحت في الخطأ السابق وعشان نتأكد بده راح اقوله هي
end أو كمان جملة اطباعة end
of ال arithmetic catch
وهي في انديهان endهذه كمان جملة out system out as
out وبدأ
أقول له هنا end of try وهذه هنا كمان بدأ أحط في
البداية عشان
نقدر نعمل tracing صح لل application تبعتنا ل start
of
الـ main اللي
عملناه بكل بساطة عملت print في بداية البرنامج أقول
له هذه البداية عرفت أخدت القيام جسمت طبعت ال
result هيها و قلت له في نهاية ال try في عندي جملة
print ال catch هيها
و حطيت فيها جملة print نهاية الـ catch و بدي أضع
نهاية ال application تبعي كمان أو نهاية ال main
method بسيطة وهي end of main خلصنا الآن بدي أجي
أعمل run بالقيم اللي موجودة، لاحظي الخطأ اللي ظهر
عندي هناليش؟ ليش ظهر بنفس النص السابق؟ لأن أنا كنت
عمالي بقوله print stack trace اللي هي بتحتوى على
المعلومات السابقة إذا أنا مابديش إياها هيك
بقوله cannot divide
by zero مثلا او اي code انت بدك تنفيه مافي مشكلة
وبالتالي هايه بداية نهاية او في داخل ال catch اخد
ال action وهي نهايتها وراح كمل بعد ال catch وراح
كمل بعد ال catch في الحالة الأولى بمجرد انه الخطأ
صار وما نعملهش catch ايش هصير في البرنامج هيروح
طيب الآنلو انا روحت بدل ال arithmetic قلتله ان
عندي input output exception كمان؟
معظم ال IDEs الآن ايش بتحطوا هتساوي؟ هتقول ان
الخطأ فعليا هنا بقعد بقوللي انت بتحاول تعمل input
output exception وانت فعليا في code تبعكمافيش ولا
حاجة علاقة بالـ input و الـ output خلّيني انا اروح
اشوف و اقوله null pointer exception مافيش مشكلة في
الموضوع الان لاحظي ان ال system هيعمل erase ل
error او ل exception اللي هو arithmetic exception
و انا عامل catch لمين؟يعني أنا فعلياً قاعد بحاول
أفسر أو بحاول أحل مشكلة Error مش هيطلع عندي
والـError اللي هيطلع مافيش ولا إله catch إيش بتوقع
البرنامج يساوي؟ Terminate، خلاص، هاي وانتهى الـHan
الآن هذه الخطأ اللي صار Han، نجله على الـCatch هل
هو null pointer exception؟ لأ هو arithmetic
exception، ماقدرش أسوي حاجةأعمل الـ Abnormal Exit
وخلصت طب مافيه catch ليش مكملش من بعدها لأ بيكمل
بعدها لو جدر يدخل لل block تبعت ال catch ويعمل
execution زي ما كان في الحالة الأولى في ال
arithmetic exception في الحالة الأولى الآن أنا
البرنامج ال execution انتقلت لل catch و بعد ال
catch كملت fluent بدون أي مشكلة طيب أنا ممكن
أستخدم أكتر من catch
الحالة هذه نعم لأ
لأ كان بيقول لي انت أساسا ما بتتعاملش في داخل ال
code داخل برنامجك مع أي input أو output ال process
وبالتالي انت بتحاول تعمل catching لأ exception مش
هيبين عندك بتسمي unquoted exception الحالة التانية
ماعملاش copy اللي
احنا سمناها ال null pointer ال null pointer
exception مافي مشكلة لأنه كونه لجل ال exception
سواء كانت في الأول أو في الآخر مش فارق كتير
null pointer exception arithmetic exception
وخلّينا بس ال code تبعتها دي عشان إيش نغيره null
pointer exception نفس
ال code ليش؟ راح فحص ال catchy الأولىمش هي في كمان
catch لجاها هي المطلوبة نفّذ فهذه الجزئية انتهينا
منها الآن حسب ال hierarchy السابقة في ال code اللي
موجود عندى كل exceptions
high جاء من مين؟من الـ super بالنسبة للـ runtime
ال exception هو عبارة عن super class و لا لا
جايبين من ال super لو أنا حققت ال super class عادي
بيعمل catch لأي runtime exception لأي runtime
exception يعني
لو أنا أجيت في لحظة من اللحظات وهذه بدي أعملها
comment
هي comment وهنا ده روح اقوله ايش exception
الان ال exception او كل ال subclasses derived من
ال exception فهيروح خلاص هايه الان اذا انت قررت
تستخدم واحد من ال super exception او عفوا من ال
super classes في ال exceptions انتبهي مايكونش في
البداية ليش؟ لأنه هيعمل matchمع كل ال subclasses
لأن العلاقة بينهم is a بين جثين أي أني sub is a
super مصبوخ ولا لأ؟ وبالتالي لما انا احطه هنا
معناته صار التحت unreachable catch مش حصلها ولا
بأي حال من الإحوال تعالى نشوف نشيل ال comments
اللي موجودة هنا
الداني خطأها للـ IDE راح يقول لي Unreachable Catch
Block مش هيصله بأي حال من الأحوال ليش؟ لأن فيه فوق
Super Exception حجب كل الوصول للي موجود عندها
تمام؟ وبالتالي الأصل إذا أنا بدي أشتغل هذه بيكون
في البداية يعني بدي أبدأ أرتب الـ Catch تبعتي للـ
SubException للـSubclass جابل الـSuperclass اللي
موجود عندها نعم تمام
هي
المعلومات اللي كنا نشوفها قبل شوية okay هانقصدك
okay معناته خلينا نوقف هذا هيكسأضع لك نفس التفاصيل
الموجودة سابقًا لأن ماهي التفاصيل؟ كانت عنوان الـ
exception عنوانه والـ callback method نظمه أو الـ
call method trace والـ line اللي كان فيها الخطأ
هذا هي نفس
البيانات المهمة اللي كانت تظهرعندك في الـ
arithmetic exception إذا بدك تشوفيه تاني هايو
المفروض okay بس منفعش ان انا اقولها كلها
Ctrl Z كمان واحدة وبعدين
هاي ال trace
نفس الخطأ بدون ولا فرق طيب عشان نروح باتجاه نخلص
من الـ finally الآن بالـ finally تعالى نشوف قلنا
ال final وين لازم تكون تكون آخر حاجة finally
system
out mandatory
execution
في كل الأحوال في كل الأحوال الانانس في عند
exception معامله quote صح هذا انا بدي احجبه بس لان
هو حمس كل ال exceptions ادي اعمل run-time لاحظي
تبع ال arithmetic اللي فوققال الـ Cannot divide by
zero ودينا تفاصيل على الـ exception end of
arithmetic خلصنا منه راح نتقل للـ finally
mandatory code execution أو mandatory execution
نفذوها وكمل برا البرنامج طيب تعالى نشوف الحالة هذه
لو أنا بدي أستبدل هذه بالـ null pointer exception
إيش اللي هيصير؟ اللي هيتنفذ جوا الـ finally طب و
اللي برا؟لأ مالوش قال
إنه صار في عندك exception هيو وبما إن الـ finally
هذه ال code لازم يتنفذ فرح نفذ ال code اللي في ال
finally وعمل إيه إيش exit لاحظ إن هو قال exception
in thread main صار في exceptionمصبوط وراح نفذ اللي
في الـ finally وطبعلي ال exception مش من خلال ال
catch من خلال ال Java virtual machine وبالتالي
برنامج عمل terminate لو ماعملش terminate كان راح
أوصل الجملة الأخيرة وكمل بمعنى آخر أن الـ finally
هذه لما تم وجد في كل الأحوال صار في error ولا
ماصارش طيب نشوف حالة ماصارش فيها error
يعني بدل ما اجسم على صفر اجسم على اتنين يعني
في كل الأحوال صار في error ماصارش ولا ماصارش في
حالة صار error ال catchإن اشتغلت ولا ما اشتغلتش
الـ finally must be executed و لازم تتنفذ وبهكسرت
أنا بقدر اتعامل مع ال error بشكل كويس جدا بس المهم
اكون فاهم ال structure اللي انا بدي اعمل فيها ال
handling تبع ال exception اللي موجودة عندي وهذه
الطريقة الأولى باعتمادنا على ال tryor catch إذا
كنت أنا برنامجي بناس تانية بتاخد منه instances أو
بتعمل عليه abstract class أو بتعمل extend أو
interface بقدر ألزمه بالـ try و ال catch عبر ال
term الأخير اللي هو ال throne وحنشوفه إن شاء الله
المحاضرة الجاية في أي سؤال يا بنات؟ الأمور تمام إن
شاء الله