منتدى لغات البرمجة والبرامج

هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

Eng: OmAr TaLaHmA-------- كـمـبـيـوتـرات و لـوحـات إلـكـتـرونـيـة

بسم الله الرحمن الرحيم --- اهلا وسهلا بكم في منتدى الكمبيوترات واللوحات الالكترونية ونرجو ان تنال اعجابكم وان تكونوا من الاعضاء الدائمين عندنا وان تستفيدوا منا وتفيدونا من خبراتكم .......وندعو الله ان يجعل من هذا الملتقى كنز للمعرفة والفائدة ..... وبارك الله فيكم

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

    عالم الذرة
    عالم الذرة
    عضو نشيط
    عضو نشيط


    عدد المساهمات : 45
    تاريخ التسجيل : 27/12/2009
    العمر : 48
    الموقع : جدة

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

    مُساهمة من طرف عالم الذرة الأحد ديسمبر 27, 2009 1:54 pm

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

    2007-09-30

    في الجافا الاستثناءات

    من السهل على المبرمج التمكن معالجة أخطاء البرنامج التركيبية والقواعدية, لكن المشكلة إن البرنامج المنتج لن يعمل بصورة مستقلة فهناك المثير من العوامل التي تؤثر على طريقة تنفيذ البرنامج من بينها المستخدم الذي يفترض إن يغذي البرنامج بالبيانات المطلوبة وكذلك الأم وبالنسبة لبيئة عمل البرنامج ونظام التشغيل المنصب على الجهاز وتوفر الملفات والملحقات الإضافية والمرتبطة مع البرنامج.. وغيرها من العوامل التي قد تسبب أيضا بإحداث أخطاء تنفيذية Run Time Error فعلى سبيل المثال لنفرض إننا عملنا على برمجة آلة حاسبة بسيطة التركيب وعند تجربتها قام المستخدم بقسمة عدد ما على صفر.
    من الثابت بقواعد الرياضيات انه لا يجوز القسمة على صفر بأي حال من الأحوال لذلك لم يتمكن البرنامج من تنفيذ العملية المطلوبة وستظهر للمستخدم رسالة خطا تنفيذي لا يمكنه تفاديها ولعل الأغلب أنها ستسبب بإغلاق البرنامج.
    ولمعالجة أخطاء التنفيذ هذه وتحجيمها فبل حدوثها وفرت لنا لغات البرمجة وعلى رأسها الجافا آلية تتمثل بوضع جمل استثناءات خاصة يتوقع من خلالها المبرمج أنواع أخطاء التنفيذ التي قد تحدث ويقوم ببرمجة حدث برمجي بكل استثناء ليتم تنفيذه بدلا من خطا التنفيذي. الخالصة إن الاستثناءات هي عبارة عن آلية برمجية لمعالج أخطاء التنفيذ المحتمل وقعها.

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

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


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

      {

      java code statements;

      }


    2. القسم catch ويختص هذا القسم باحتواء التعليمات البرمجية التي من شانها معالجة الأخطاء التي قد تحدث داخل القسم try وبما ان أخطاء التنفيذ كثيرة متعددة فيمكننا صياغة أكثر من تعليمة catch لتحتوي كل واحدة منها على نوع معين من أخطاء التنفيذ وتكن عادة جميع جمل catch مرتبطة بجملة try تكتب جمل catch وفق الصيغة العامة التالية :

      catch (ExceptionType name)

      {

      java code statments;

      }


      يجب تضمين جملة catch نوع الخطأ المتوقع حدوثه Exception Type ومنح الخطأ اسما حتى نتمكن من التعامل معه. ويمكننا داخل كتلة catch صياغة تعليمات برمجية ليتم تنفيذها عند حدوث الخطأ لتضمن عند تنفيذ البرنامج تحجيم نسبة أخطاء التنفيذ وإعادة توجيه سير تدفق البرنامج إلى التعليمات المدرجة داخل catch دون ظهور رسالة خطا التنفيذ أو ان يؤدي ذلك إلى إغلاق البرنامج.
      يعتبر القسم catch إجباري فلا يمكننا استخدام معالجة الاستثناءات بدونه ولكن يمكننا إدراجه بصورته العامة دون صياغة أي تعليمة برمجية بداخله.. وهنا بمجرد حدوث الخطأ التنفيذي المحدد داخل جملة catch الفارغة فان البرنامج سيتجاهل تنفيذ التعليمة البرمجية التي تحتوي الخطأ والمدرجة داخل القسم try ليتنقل مباشرة إلى تنفيذ التعليمات التي تلي معالجة الاستثناء كما سنبين ذلك في الأمثلة القادمة.
    3. القسم 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



      الوقت/التاريخ الآن هو الأحد مايو 12, 2024 10:09 pm