القائمة الرئيسية

الصفحات

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

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

معالجة الاستثناءات,exception handling,exceptions handling,nested exception handling,c++ exception handling,exception handling mechanism,use of exception handling,handling nulls in if statement,need for exception handling,الاستثناءات في لغة جافا,programming exception handling,exception java,understanding exceptions,python try except raise statement,function that generates an exception,re throwing an exception,exceptions in python,select statement in pl/sql
السلام عليكم ورحمة الله وبركاتة مرحبا بكم احبتي : في هذا الموضوع سوف نتحدث ونشرح درس تعلم الجافا جمل معالجة الاستثناءات وتعريف الاستثناء واقسامة. 

ما معنى بالاستثناءات ؟

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

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

معالجة الاستثناءات في لغة جافا

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

على سبيل المثال : لنفترض أننا عملنا على برمجة آلة حاسبة بسيطة التثبيت ، وعند تجربتها ، قسّم المستخدم رقمًا على صفر.


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

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

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

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

قسم 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


تعلم الجافا بكل سهولة - جمل التكرار Looping Statements

دروس في سي بلس بلس ++C الاقترانات السطرية Inline function للمبتدئين

الدرس الثاني في سي بلس بلس ++C الاستغناء عن عملية التصريح ومشكلة تزامن الاستدعاء

وفي الختام : نشكركم على مروركم الكريم زوار و متابعين موقع الاندرويد تيك التقنية ونتمنى ان نكون قد وفقنا في هذا المقال , كما نرحب بعودتكم مرة اخرى لموقعنا ومتابعة كل جديد او يمكنكم الانضمام الى القناة الخاصة بلموقع لمتابعة كل جديد على التلجرام من هنا .

تعليقات

التنقل السريع