رمي جافا: رمي الاستثناء
يمكن للبرنامج استخدام بيان الرمي لرمي استثناءات واضحة. الشكل المعتاد لبيان الرمي هو كما يلي:
رمي رمي.
هنا ، يجب أن يكون ThrowableInstance كائنًا لنوع الفئة القابلة للرمي أو نوع الفئة الفرعية القابلة للرمي. لا يمكن استخدام الأنواع البسيطة ، مثل int أو char ، والفئات غير القابلة للتصوير ، مثل السلسلة أو الكائن ، كاستثناءات. هناك طريقتان للحصول على كائنات قابلة للارتفاع: استخدم المعلمات في جملة Catch أو إنشاءها مع المشغل الجديد.
يتوقف تنفيذ البرنامج مباشرة بعد بيان الرمي ؛ يتم استخدام كتلة TRY الأكثر ضخمة للتحقق مما إذا كان يحتوي على بيان الصيد الذي يتطابق مع نوع الاستثناء. إذا تم العثور على كتلة مطابقة ، يتحول التحكم إلى البيان ؛ إذا لم يتم العثور على كتلة اصطياد مطابقة ، فإن معالج الاستثناء الافتراضي يقطع تنفيذ البرنامج ويطبع تتبع المكدس.
ما يلي هو برنامج مثال يخلق ويلقي الاستثناءات.
// إظهار throw.class throwdemo {static void demoproc () {try {throw nullpointexception ("demo") ؛ / / rethrow الاستثناء}} الفراغ الثابت العام (سلسلة args []) {try {demoproc () ؛ لدى البرنامج فرصتين للتعامل مع الخطأ نفسه. أولاً ، يقوم Main () بإعداد علاقة استثناء ثم يستدعي Demoproc (). تقوم طريقة Demoproc () بعد ذلك بإعداد علاقة معالجة استثناء آخر ويرمي على الفور مثيل NullPointerException جديد ، والذي يتم التقاطه على السطر التالي. ثم يتم طرح الاستثناء مرة أخرى. هنا هي نتيجة الإخراج:
اشتعلت داخل demoproc.recaught: java.lang.nullpointerxception: Demo
يشرح البرنامج أيضًا كيفية إنشاء كائنات استثناء قياسية في Java ، مع إيلاء اهتمام خاص للخط التالي:
رمي nullpointerxception جديد ("Demo") ؛
هنا ، يتم استخدام NEW لإنشاء مثيل nullpointerxception. تحتوي جميع استثناءات وقت التشغيل المدمجة في Java على مُنشئين: لا يوجد أحد معلمات وواحد لديه معلمة سلسلة. عند استخدام النموذج الثاني ، تحدد المعلمة السلسلة التي تصف الاستثناء. إذا تم استخدام الكائن كمعلمة للطباعة () أو println () ، فسيتم عرض السلسلة. يمكن أيضًا تحقيق ذلك عن طريق استدعاء getMessage () ، والذي يتم تعريفه عن طريق الرمي.
جملة Java ترمي <br /> إذا كانت الطريقة يمكن أن تتسبب في استثناء ولكنها لا تتعامل معه ، فيجب أن تحدد هذا السلوك بحيث يمكن أن يحمي المتصل بالطريقة أنفسهم دون استثناء. للقيام بذلك ، يمكنك تضمين بند رمي في إعلان الطريقة. يسرد جملة رمي جميع أنواع الاستثناءات التي قد ترميها الطريقة. هذا ضروري لجميع استثناءات الأنواع باستثناء الخطأ أو RunTimeException والفئات الفرعية. يجب الإعلان عن جميع أنواع الاستثناءات الأخرى التي يمكن أن ترميها في جملة TROWS. الفشل في القيام بذلك سيؤدي إلى خطأ في التجميع.
فيما يلي شكل شائع لإعلان الطريقة الذي يحتوي على جملة رمي:
اكتب اسم الطريقة (قائمة المعلمة) رمي قائمة الاستثناء {// body of method}هنا ، قائمة الاستثناءات هي قائمة استثناءات من فاصلة يمكن أن ترميها الطريقة.
هنا مثال غير صحيح. يحاول هذا المثال رمي استثناء أنه لا يمكن التقاطه. نظرًا لأن البرنامج لا يحدد بند رمي لإعلان الحقيقة ، فلن يتم تجميع البرنامج.
// يحتوي هذا البرنامج على خطأ ولن يترجم. args string []) {throwone () ؛ لتجميع البرنامج ، يجب تغيير مكانين. أولاً ، تحتاج إلى إعلان ThrowOne () لرفع استثناء غير قانوني. ثانياً ، يجب أن تحدد MAIN () بيان المحاولة/الصيد للقبض على الاستثناء. الأمثلة الصحيحة هي كما يلي:
// هذا صحيح الآن. ) {try {throwone () ؛ فيما يلي نتائج الإخراج للمثال:
داخل Throwonecaught Java.lang.IlegalAccessException: Demo