جمل معالجة الاستثناءات فى الجافا Exceptions Handling Statement

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

جمل معالجة الاستثناءات فى الجافا Exceptions Handling Statement

مُساهمة من طرف VB.NET في الخميس فبراير 21, 2013 11:27 am

اهلا وسهلا الاخوة الكرام فى منتدى مصر التقنى ....اليوم نقدم لكم درس جديد وهو منقول من المجلة العربية وهو عن كيفية معالجة الاستثناءات فى الجافا و قبل ان نبدأ تعالوا نتعرف ....ماذا نعنى بالاستثناءات ؟

من الثابت بقواعد الرياضيات انه لا يجوز القسمة على صفر بأي حال من الأحوال لذلك لم يتمكن البرنامج من تنفيذ العملية المطلوبة وستظهر للمستخدم رسالة خطا تنفيذي لا يمكنه تفاديها ولعل الأغلب أنها ستسبب بإغلاق البرنامج.

ولمعالجة أخطاء التنفيذ هذه وتحجيمها فبل حدوثها وفرت لنا لغات البرمجة وعلى رأسها الجافا آلية تتمثل بوضع جمل استثناءات خاصة يتوقع من خلالها المبرمج أنواع أخطاء التنفيذ التي قد تحدث ويقوم ببرمجة حدث برمجي بكل استثناء ليتم تنفيذه بدلا من خطا التنفيذي. الخالصة إن الاستثناءات هي عبارة عن آلية برمجية لمعالج أخطاء التنفيذ المحتمل وقعها.....وهذا ما يقصد بمعالجة الاستثناءات فى لغة الجافا .

أقسام جمل معالجة الاستثناءات

تقسم جملة معالجة الاستثناءات إلى ثلاثة أقسام رئيسية, هي:

القسم 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
المساهمات : 117
النقاط : 185
التقيم : 6
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى