موصى به, 2021

اختيار المحرر

الفرق بين رمي ورميات في جاوة

الرمي والرميات هي الكلمات الأساسية المستخدمة في معالجة الاستثناء. يتم استخدام الكلمة الأساسية throw لتسليم مثيل الاستثناء إنشاؤها بواسطة المبرمج إلى JVM يدوياً. الكلمة الأساسية throws المستخدمة لتسليم مسؤولية معالجة الاستثناء وقعت في الأسلوب لأسلوب المتصل. الاختلاف الأساسي بين الرمي والرمية هو أن الكلمة الأساسية للرمي تستخدم كائن الاستثناء بينما تستخدم الكلمة الأساسية throws اسم فئات الاستثناءات.

رسم بياني للمقارنة

أساس المقارنةيرمييلقي
الأساسيةتقوم الكلمة الرئيسية throw بتوجيه كائن الاستثناء الذي تم إنشاؤه إلى JVM يدويًا.يتم استخدام الكلمة الأساسية throws لتفويض مسؤولية معالجة الاستثناء إلى الطالب الأسلوب.
بناء الجملةرمي Thressable-instancereturn_type method_name (قائمة المعلمات) يلقي ExceptionClass_list
{
// body of method
}
تليهايتبع الكلمة الأساسية throw كائن استثناء.الكلمة الأساسية throws متبوعة بقائمة فئات الاستثناءات التي يمكن أن تحدث في الطريقة.
عدد من طرح القيتيمكن أن رمي الكلمة الأساسية على مثيل استثناء واحد.الكلمة الأساسية throws يمكن تعريف فئات استثناء متعددة مفصولة بفاصلة.

تعريف رمي

يتم استخدام الكلمة الأساسية " throw " لتسليم مثيل الاستثناء الذي تم إنشاؤه إلى JVM (Java Virtual Machine) يدويًا. إذا لم يتم استخدام "رمي" لرمي مثيل استثناء وحدث الاستثناء ، فعندئذ يقوم نظام وقت التشغيل بطرح استثناء الحالة إلى JVM وينتهي البرنامج بشكل غير طبيعي. الشكل العام للكلمة الرئيسية للرمي هو:

 رمي Throwable_instance ؛ 

فوق Throwable_instance يجب أن يكون موضوعًا للفئة Throwable. لا يمكن طرح الأنواع البدائية مثل int أو float أو char ونسخة الطبقة غير القابلة للإزالة باستخدام الكلمة الأساسية للرمي.

دعونا نأخذ مثالا لفهم رمي الكلمة الرئيسية.

 Class Test {Public static void main (String [] args) {throw new ArithmeticException ("/ by zero")؛ }} 

في التعليمات البرمجية أعلاه ، يرمي رمي الكلمة الأساسية مثيل فئة استثناء "ArithmeticException". إذا لم يتم استخدام الكلمة الأساسية للرمي ، فسيكون الأسلوب main () داخليًا قد أنشأ كائن استثناء تم تسليمه إلى JVM.

النقاط التي يجب تذكرها حول رمي الكلمة الرئيسية:

  • يقوم بتسليم كائن الاستثناء يدوياً إلى JVM.
  • من الأفضل استخدامه في الاستثناءات المعرفة من قبل المستخدم أو الاستثناءات المخصصة.
  • إذا لم يتم تخصيص الذاكرة إلى كائن الاستثناء الذي تم طرحه عن طريق رمي الكلمة الأساسية ، فحينئذٍ يحدث استثناء وقت التشغيل ، NullPointerException.
  • توقف الكلمة الأساسية throw تنفيذ البرنامج مباشرة بعد حدوثها. لا يمكننا كتابة أي بيان مباشرة بعد بيان الرمية. إذا قمنا بكتابة أي خاصية مباشرة بعد إلقاء العبارة ، سيعرض المجمع خطأ ، عبارة لا يمكن الوصول إليها أثناء التحويل البرمجي.
  • يمكن فقط طرح كائنات من فئة Throwable باستخدام الكلمة الأساسية. إذا كان الكائن الذي تم طرحه ليس كائنًا في الفئة قابل للقذف ، فسنحصل على خطأ وقت في الترجمة "تم العثور على نوع غير متوافق. . مطلوب java.lang.Throwable "

ملحوظة:

يتم استخدام الكلمة الأساسية throw في C ++ أو JAVA أو C # ، لإدراج استثناء يدويًا.

تعريف الرميات

يتم استخدام الكلمة الأساسية " throws " لتفويض المسؤولية عن معالجة الاستثناء في الطريقة إلى أسلوب المتصل الخاص به. طريقة المتصل مسؤولة عن التعامل مع الاستثناء قد تكون أي طريقة أخرى أو JVM. يعلن قائمة فئات الاستثناءات التي قد تحدث في الأسلوب.

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

الشكل العام للكلمة الرئيسية هي:

 return_type method_name (parameter-list) throws exceptionClass_list {// body of method} 

يمكننا أن نرى أن الكلمة الأساسية الخاصة بالرمية تظهر بعد توقيع الطريقة ، ويمكن أن تحتوي على قائمة فئات الاستثناءات التي قد تحدث في الطريقة. يتم فصل قائمة فئات الاستثناءات التي تمت كتابتها بعد الكلمة المفتاحية بالفاصلة.

دعونا نأخذ مثالا واحدا لفهم الكلمة الرئيسية.

 calss Test {public static void main (String [] args) throws InterruptedException {thread sleep (10000)؛ }} 

في الكود أعلاه ، يتم إجراء مؤشر الترابط الرئيسي للنوم لبعض الوقت باستخدام طريقة sleep (). الآن ، عندما يكون الأسلوب الرئيسي في وضع السكون من المحتمل أن المقاطع الأخرى قد تقاطع مؤشر الترابط الرئيسي. ولكن ، يتم استخدام الكلمة الأساسية throws بعد التوقيع على main () الطريقة لذلك ، البرنامج يمكن ترجمة بسهولة. الكلمة الأساسية throws يتم تعريف فئة الاستثناءات المحددة InterruptedException. الآن ، إذا كان أي مؤشر ترابط آخر مقاطعات مؤشر الترابط الرئيسي أثناء وقت التشغيل سيتم تسليم الكلمة الأساسية throws هذا الاستثناء إلى المتصل من main () ، وهو JVM. سيقوم JVM بإنهاء البرنامج بشكل غير طبيعي.

النقاط التي يجب تذكرها حول الكلمات الرئيسية:

  • يتم استخدام الكلمة الأساسية throws فقط للتصريح فئات الاستثناءات المحددة. استخدام الكلمة الأساسية لرميات استثناء غير محدد ليس له أي تأثير.
  • إذا لم ترغب الطريقة في معالجة الاستثناء بمفردها ، تقوم بتفويض ذلك الاستثناء إلى طريقة المتصل الخاصة بهذه الفئة باستخدام الكلمة الأساسية الخاصة بالعرض.
  • يسمح استخدامه فقط بالتجميع السلس للبرنامج.
  • في حالة حدوث استثناء في وقت التشغيل ، يتم إنهاء البرنامج بشكل غير طبيعي ، حتى بعد استخدام الكلمة المفتاحية.
  • من المستحسن استخدام حظر try / catch لإنهاء البرنامج العادي في حالة حدوث استثناء في وقت التشغيل.

ملحوظة:

الكلمة الرئيسية تستخدم فقط في Java. C ++ و C # لا تستخدم الكلمة الأساسية throws.

الاختلافات الرئيسية بين رمي ويلقي

  1. يتم تسليم الكلمة الرئيسية ، تسليم مسؤولية معالجة الاستثناء إلى JVM يدويًا بينما يتم طرح الكلمة الرئيسية ، تسليم مسؤولية معالجة الاستثناء إلى طريقة المتصل من الرمز الذي حدث فيه الاستثناء.
  2. يتبع الكلمة الأساسية throw كائن الاستثناء تسليمها إلى JVM. من ناحية أخرى ، تتم إضافة الكلمة الأساسية throws بواسطة فئات الاستثناءات التي يمكن أن تحدث في الطريقة.
  3. يمكن أن تقوم الكلمة المفتاحية بطرح كائن استثناء وحيد في كل مرة ، بينما يمكن للكلمة الرئيسية الخاصة بالعرض أن تعلن عن فئات استثناءات متعددة مفصولة بفاصلة في كل مرة.

استنتاج:

أفضل استخدام الكلمة الأساسية throw للاستثناءات المخصصة. يعتبر كتلة try / catch هي الأفضل للتعامل مع الاستثناءات مقارنةً بالكلمة الأساسية throws.

Top