جمل معالجة الاستثناءات فى الجافا Exceptions Handling Statement
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: أساسيات اللغة Java Basics
صفحة 1 من اصل 1 • شاطر
جمل معالجة الاستثناءات فى الجافا Exceptions Handling Statement
اهلا وسهلا الاخوة الكرام فى منتدى مصر التقنى ....اليوم نقدم لكم درس جديد وهو منقول من المجلة العربية وهو عن كيفية معالجة الاستثناءات فى الجافا و قبل ان نبدأ تعالوا نتعرف ....ماذا نعنى بالاستثناءات ؟
من الثابت بقواعد الرياضيات انه لا يجوز القسمة على صفر بأي حال من الأحوال لذلك لم يتمكن البرنامج من تنفيذ العملية المطلوبة وستظهر للمستخدم رسالة خطا تنفيذي لا يمكنه تفاديها ولعل الأغلب أنها ستسبب بإغلاق البرنامج.
ولمعالجة أخطاء التنفيذ هذه وتحجيمها فبل حدوثها وفرت لنا لغات البرمجة وعلى رأسها الجافا آلية تتمثل بوضع جمل استثناءات خاصة يتوقع من خلالها المبرمج أنواع أخطاء التنفيذ التي قد تحدث ويقوم ببرمجة حدث برمجي بكل استثناء ليتم تنفيذه بدلا من خطا التنفيذي. الخالصة إن الاستثناءات هي عبارة عن آلية برمجية لمعالج أخطاء التنفيذ المحتمل وقعها.....وهذا ما يقصد بمعالجة الاستثناءات فى لغة الجافا .
أقسام جمل معالجة الاستثناءات
تقسم جملة معالجة الاستثناءات إلى ثلاثة أقسام رئيسية, هي:
القسم try وهي عبارة عن كتلة برمجية خاصة يكتب بداخله المبرمج التعليمات البرمجية التي يتوقع حدوث خطا تنفيذي خلالها وتكون صيغتها العامة على النحو الآتي:
القسم catch ويختص هذا القسم باحتواء التعليمات البرمجية التي من شانها معالجة الأخطاء التي قد تحدث داخل القسم try وبما ان أخطاء التنفيذ كثيرة متعددة فيمكننا صياغة أكثر من تعليمة catch لتحتوي كل واحدة منها على نوع معين من أخطاء التنفيذ وتكن عادة جميع جمل catch مرتبطة بجملة try تكتب جمل catch وفق الصيغة العامة التالية :
يجب تضمين جملة catch نوع الخطأ المتوقع حدوثه Exception Type ومنح الخطأ اسما حتى نتمكن من التعامل معه. ويمكننا داخل كتلة catch صياغة تعليمات برمجية ليتم تنفيذها عند حدوث الخطأ لتضمن عند تنفيذ البرنامج تحجيم نسبة أخطاء التنفيذ وإعادة توجيه سير تدفق البرنامج إلى التعليمات المدرجة داخل catch دون ظهور رسالة خطا التنفيذ أو ان يؤدي ذلك إلى إغلاق البرنامج.
يعتبر القسم catch إجباري فلا يمكننا استخدام معالجة الاستثناءات بدونه ولكن يمكننا إدراجه بصورته العامة دون صياغة أي تعليمة برمجية بداخله.. وهنا بمجرد حدوث الخطأ التنفيذي المحدد داخل جملة catch الفارغة فان البرنامج سيتجاهل تنفيذ التعليمة البرمجية التي تحتوي الخطأ والمدرجة داخل القسم try ليتنقل مباشرة إلى تنفيذ التعليمات التي تلي معالجة الاستثناء كما سنبين ذلك في الأمثلة القادمة.
القسم finally علما بان الصيغة العامة للقسم finally تكون على النحو التالي.
بالرغم من إن القسم finally يعتبر اختبارا طالما أن القسم catch موجود إلا انه يعتبر أهم أقسام كتلة معالجة الاستثناء فمن خلاله يمكن للمبرمج تحديد أي من جمل الاستثناء catch التي سيتم تنفيذها إذا كان هناك أكثر من جملة. كما يمكن للمبرمج صياغة تعليمات برمجية داخل هذا القسم ليتم تنفيذها بصورة مستقلة عن التعليمات المدرجة داخل جمل catch كما يمكننا الاعتماد على القسم finally كبديل للقسم catch خاصة إذا كنا لا نريد تحديد نوع الخطأ المتوقع.
الصيغة الكاملة لكتلة معالجة الاستثناء
الشكل التالي يبين الأقسام الثلاث لكتلة معالجة الاستثناء
آلية تنفيذ كتلة الاستثناءات
لمعرفة طريقة تنفيذ الكتل الاستثنائية, ادرس البرنامج التالي.
عند ترجمة البرنامج السابق سنحصل على نتيجة ايجابية مفادها خلو البرنامج من الأخطاء القواعدية والتركيبية. ولكن النتيجة بعد تنفيذ البرنامج حتما ستكون مغايرة إذ سيظهر لنا معالج الأخطاء التنفيذية رسالة Run Time Error لاحظ ان البرنامج قام بتنفيذ تعليمة الطباعة Arabic SEO وبمجرد انتقال تدفق البرنامج إلى تعليمة القسمة float b= X/0 وجد معالج أخطاء التنفيذ أن عملية القسمة غير الشرعية فلا يجوز القسمة على صفر ولهذا السبب اظهر لنا رسالة خطا التنفيذ وبصورة متزامنة أوقف تنفيذ البرنامج ومنع تعليمة الطباعة الثانية من التنفيذ. لنعمل الآن على إعادة صياغة البرنامج باستخدام القسم try من معالجة الاستثناءات, كما في الشكل التالي:
لاحظ عند ترجمة البرنامج سنحصل على خطا قواعدي ينص على إننا استخدمنا تعليمة الاستثناء try دون احد الأقسام الأساسية لها مثل catch أو finally , لذلك علينا الالتزام بالتركيب العام لجمل الاستثناء وإعادة صياغة البرنامج بتضمينها القسم catch لتصبح على النحو الآتي:
استخدمنا القسم catch لمعالجة خطا القسمة على صفر, لاحظ إننا صرحنا عن نوع الخطأ التنفيذي بصورة عامة Exception دون أي تحديد. وقمنا بصياغة تعليمة طباعة لتظهر للمستخدم ولتوضح له إن القسمة على صفر غير مسموحة لها. عند تنفيذ البرنامج والوصول إلى تعليمة القسمة سيكتشف معالج أخطاء التنفيذ وجود الخطأ وبالتالي سينتقل مباشرة إلى القسم catch لينفذ ما بدخله من تعليمات. وبالتالي يمكننا إعادة صيغة البرنامج السابق بتوظيف القسم finally لطباعة النص Sorry أو أي كود برمجي آخر, كما في النص التالي.
من الثابت بقواعد الرياضيات انه لا يجوز القسمة على صفر بأي حال من الأحوال لذلك لم يتمكن البرنامج من تنفيذ العملية المطلوبة وستظهر للمستخدم رسالة خطا تنفيذي لا يمكنه تفاديها ولعل الأغلب أنها ستسبب بإغلاق البرنامج.
ولمعالجة أخطاء التنفيذ هذه وتحجيمها فبل حدوثها وفرت لنا لغات البرمجة وعلى رأسها الجافا آلية تتمثل بوضع جمل استثناءات خاصة يتوقع من خلالها المبرمج أنواع أخطاء التنفيذ التي قد تحدث ويقوم ببرمجة حدث برمجي بكل استثناء ليتم تنفيذه بدلا من خطا التنفيذي. الخالصة إن الاستثناءات هي عبارة عن آلية برمجية لمعالج أخطاء التنفيذ المحتمل وقعها.....وهذا ما يقصد بمعالجة الاستثناءات فى لغة الجافا .
أقسام جمل معالجة الاستثناءات
تقسم جملة معالجة الاستثناءات إلى ثلاثة أقسام رئيسية, هي:
القسم try وهي عبارة عن كتلة برمجية خاصة يكتب بداخله المبرمج التعليمات البرمجية التي يتوقع حدوث خطا تنفيذي خلالها وتكون صيغتها العامة على النحو الآتي:
- الكود:
try
{
java code statements;
}
القسم catch ويختص هذا القسم باحتواء التعليمات البرمجية التي من شانها معالجة الأخطاء التي قد تحدث داخل القسم try وبما ان أخطاء التنفيذ كثيرة متعددة فيمكننا صياغة أكثر من تعليمة catch لتحتوي كل واحدة منها على نوع معين من أخطاء التنفيذ وتكن عادة جميع جمل catch مرتبطة بجملة try تكتب جمل catch وفق الصيغة العامة التالية :
- الكود:
catch (ExceptionType name)
{
java code statments;
}
يجب تضمين جملة catch نوع الخطأ المتوقع حدوثه Exception Type ومنح الخطأ اسما حتى نتمكن من التعامل معه. ويمكننا داخل كتلة catch صياغة تعليمات برمجية ليتم تنفيذها عند حدوث الخطأ لتضمن عند تنفيذ البرنامج تحجيم نسبة أخطاء التنفيذ وإعادة توجيه سير تدفق البرنامج إلى التعليمات المدرجة داخل catch دون ظهور رسالة خطا التنفيذ أو ان يؤدي ذلك إلى إغلاق البرنامج.
يعتبر القسم catch إجباري فلا يمكننا استخدام معالجة الاستثناءات بدونه ولكن يمكننا إدراجه بصورته العامة دون صياغة أي تعليمة برمجية بداخله.. وهنا بمجرد حدوث الخطأ التنفيذي المحدد داخل جملة catch الفارغة فان البرنامج سيتجاهل تنفيذ التعليمة البرمجية التي تحتوي الخطأ والمدرجة داخل القسم try ليتنقل مباشرة إلى تنفيذ التعليمات التي تلي معالجة الاستثناء كما سنبين ذلك في الأمثلة القادمة.
القسم finally علما بان الصيغة العامة للقسم finally تكون على النحو التالي.
- الكود:
finally
{
java code statements;
}
بالرغم من إن القسم finally يعتبر اختبارا طالما أن القسم catch موجود إلا انه يعتبر أهم أقسام كتلة معالجة الاستثناء فمن خلاله يمكن للمبرمج تحديد أي من جمل الاستثناء catch التي سيتم تنفيذها إذا كان هناك أكثر من جملة. كما يمكن للمبرمج صياغة تعليمات برمجية داخل هذا القسم ليتم تنفيذها بصورة مستقلة عن التعليمات المدرجة داخل جمل catch كما يمكننا الاعتماد على القسم finally كبديل للقسم catch خاصة إذا كنا لا نريد تحديد نوع الخطأ المتوقع.
الصيغة الكاملة لكتلة معالجة الاستثناء
الشكل التالي يبين الأقسام الثلاث لكتلة معالجة الاستثناء
- الكود:
try
{
java code statments;
}
catch (ExceptionType1 name)
{
Exception 1;
}
catch (ExceptionType2 name)
{
Exception 2;
}
finally
{
java code statements;
}
آلية تنفيذ كتلة الاستثناءات
لمعرفة طريقة تنفيذ الكتل الاستثنائية, ادرس البرنامج التالي.
- الكود:
public class MyMain2
{
public static void main(Stringargs[])
{
system.Out.Println("Arabic SEO");
int X=10;
float b=X/0;
System.Out.Println("The answer is"+b);
}//end main
}//end class
عند ترجمة البرنامج السابق سنحصل على نتيجة ايجابية مفادها خلو البرنامج من الأخطاء القواعدية والتركيبية. ولكن النتيجة بعد تنفيذ البرنامج حتما ستكون مغايرة إذ سيظهر لنا معالج الأخطاء التنفيذية رسالة Run Time Error لاحظ ان البرنامج قام بتنفيذ تعليمة الطباعة Arabic SEO وبمجرد انتقال تدفق البرنامج إلى تعليمة القسمة float b= X/0 وجد معالج أخطاء التنفيذ أن عملية القسمة غير الشرعية فلا يجوز القسمة على صفر ولهذا السبب اظهر لنا رسالة خطا التنفيذ وبصورة متزامنة أوقف تنفيذ البرنامج ومنع تعليمة الطباعة الثانية من التنفيذ. لنعمل الآن على إعادة صياغة البرنامج باستخدام القسم try من معالجة الاستثناءات, كما في الشكل التالي:
- الكود:
public class MyMain2
{
public static void main(String args[])
{
System.Out.Println("Arabic SEO");
try
{
int X=10;
float b=X/0;
System.Out.Println("The answer is"+b);
}//end try
}//end main
}//end class
لاحظ عند ترجمة البرنامج سنحصل على خطا قواعدي ينص على إننا استخدمنا تعليمة الاستثناء try دون احد الأقسام الأساسية لها مثل catch أو finally , لذلك علينا الالتزام بالتركيب العام لجمل الاستثناء وإعادة صياغة البرنامج بتضمينها القسم catch لتصبح على النحو الآتي:
- الكود:
public class MyMain2
{
public static void main (String args[])
{
System.Out.Println("Arabic SEO");
try
{
int X=10;
float b=X/0;
System.Out.Println("The answer is"+b);
}//end try
catch (Exception e)
{
System.Out.Println("Not Allow to Dived by 0");
}//end catch
}//end main
}//end class
استخدمنا القسم catch لمعالجة خطا القسمة على صفر, لاحظ إننا صرحنا عن نوع الخطأ التنفيذي بصورة عامة Exception دون أي تحديد. وقمنا بصياغة تعليمة طباعة لتظهر للمستخدم ولتوضح له إن القسمة على صفر غير مسموحة لها. عند تنفيذ البرنامج والوصول إلى تعليمة القسمة سيكتشف معالج أخطاء التنفيذ وجود الخطأ وبالتالي سينتقل مباشرة إلى القسم catch لينفذ ما بدخله من تعليمات. وبالتالي يمكننا إعادة صيغة البرنامج السابق بتوظيف القسم finally لطباعة النص Sorry أو أي كود برمجي آخر, كما في النص التالي.
- الكود:
public class MyMain2
{
public static void main(String args[])
{
System.Out.Println("Arabic SEO");
try
{
int X=10;
float b=X/0;
System.Out.Println("The answer is"+b);
}//end try
catch(Exception e)
{
System.Out.Println("Not Allow to Dived by 0");
}//end catch
finally
{
System.Out.Println("Sorry");
}//end finally
}//end main
}//end class
VB.NET- المراقبين
- تاريخ التسجيل : 18/02/2011
المساهمات : 121
النقاط : 189
التقيم : 6
الدولة :
الجنس :
رد: جمل معالجة الاستثناءات فى الجافا Exceptions Handling Statement
شكرا جزيلا يا فتي


ـــــــــــــــــــ التوقيع ــــــــــــــــــــ

NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: أساسيات اللغة Java Basics
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
» موضوعات طبية وصحية وغذائية هامة مع قناة معلومة لصحتك
» خدمة الدعاية و الاعلان المدفوعة و المجانية بالمنتدى ...الشروط و الاسعار
» أكتب برنامج بلغة الجافا لتمثيل حساب مصرفى باستخدم عدد 2 كلاس
» التعامل مع الشبكات فى الجافا Java Networking
» كود خوارزميه RSA بالجافا
» تعلم كيفية حفظ و أسترجاع الصورة فى قاعدة بيانات أكسس باستخدام الكائن Stream object
» اصنع شبكتك بنفسك
» شبكة فودافون مصر
» Self-control