النهائي: تعطيل المفاتيح المتعددة الأشكال ~
تعديل المتغيرات: لا يمكن تغيير المتغيرات
تعديل الفئة: لا يمكن أن يتم مورث الفصول الدراسية
طريقة التعديل: لا يمكن إعادة كتابة الطريقة
أخيرًا: كتلة البيان الأخيرة المستخدمة في معالجة الاستثناء
سواء تم إنشاء استثناء أم لا ، يجب تنفيذه ~~~
كود جافا
الفئة النهائية العامة أخيرًا {public static void main (string [] args) {try {throw nullpointerxception () ؛ } catch (NullPointerException e) {system.out.println ("البرنامج يلقي استثناءً") ؛ } أخيرًا {system.out.println ("تم تنفيذ كتلة البيان أخيرًا") ؛ }}}استخدام الكلمات الرئيسية أخيرًا في جافا
بالمقارنة مع نماذج اللغة الأخرى ، فإن الكلمة الرئيسية أخيرًا هي أفضل إضافة إلى نموذج معالجة استثناء Java. تسمح الهيكل الأخير للرمز بتنفيذ دائمًا بغض النظر عما إذا كان الاستثناء يحدث. استخدم أخيرًا للحفاظ على الحالة الداخلية للكائن وتنظيف الموارد غير الذاكرة. بدون رمزك أخيرًا ، سيكون المربح. على سبيل المثال ، يوضح الرمز التالي كيف يجب عليك كتابة رمز لتحرير الموارد غير الذاكرة دون استخدام أخيرًا:
استيراد java.net.*؛ استيراد java.io.*؛ class بدون {public void foo () يلقي ioException {// إنشاء مأخذ توصيل على أي serversite sportocket ss = new servers (0) ؛ حاول {Socket Socket = Ss.Accept () ؛ // رمز آخر هنا ...} catch (ioException e) {ss.close () ؛ // 1 رمي ه ؛ } // ... ss.close () ؛ // 2}}يقوم هذا الرمز بإنشاء مقبس ويستدعي طريقة القبول. قبل الخروج من هذه الطريقة ، يجب عليك إغلاق هذا المقبس لتجنب نقاط الضعف في الموارد. لإنجاز هذه المهمة ، نسمي Close AT // 2 ، وهو آخر بيان للطريقة. ولكن ماذا يحدث إذا حدث استثناء في كتلة المحاولة؟ في هذه الحالة ، لا تحدث المكالمة الوثيقة في // 2. لذلك ، يجب عليك التقاط هذا الاستثناء وإدراج مكالمة أخرى لإغلاقها على // 1 قبل إعادة إصدار هذا الاستثناء. هذا يضمن إغلاق المقبس قبل الخروج من الطريقة.
إن كتابة رمز مثل هذا مرهق ومعرض للخطأ ، لكنه ضروري بدون أخيرًا. لسوء الحظ ، بلغات بدون آلية أخيرًا ، قد ينسى المبرمجون تنظيم الكود الخاص بهم بهذه الطريقة ، مما يؤدي إلى نقاط الضعف في الموارد. البند الأخير في جافا يحل هذه المشكلة. مع أخيرًا ، يمكن إعادة كتابة الكود السابق في النموذج التالي:
استيراد java.net.*؛ استيراد java.io.*؛ class withfinally {public void foo2 () يلقي ioException {// إنشاء مأخذ توصيل على أي خادم منفذ مجاني ss = serversocket (0) ؛ حاول {Socket Socket = Ss.Accept () ؛ // رمز آخر هنا ...} أخيرًا {ss.close () ؛ }}}تضمن الكتلة أخيرًا أن يتم تنفيذ الطريقة الإغلاق دائمًا بغض النظر عما إذا كان يتم إصدار استثناء خلال كتلة المحاولة. لذلك ، يتم التأكد من أن الطريقة الإغلاق تسمى دائمًا قبل الخروج من الطريقة. وبهذه الطريقة يمكنك التأكد من أن المقبس مغلق وأنك لم تسرب الموارد. ليست هناك حاجة لكتابة صيد أخرى في هذه الطريقة. يتم توفير كتلة الصيد في المثال الأول فقط لإغلاق المقبس ، والآن يتم إغلاق هذا من قبل أخيرًا. إذا قمت بتقديم كتلة اصطياد ، يتم تنفيذ الكود في الكتلة أخيرًا بعد انتهاء كتلة الصيد.
يجب استخدام الكتلة الأخيرة مع مجموعة المحاولة أو المحاولة/التقاط. علاوة على ذلك ، لا يمكن الخروج من كتلة المحاولة دون تنفيذ كتلة لها أخيرًا. إذا كانت الكتلة أخيرًا موجودة ، فسيتم تنفيذها دائمًا. (هذا البيان صحيح من وجهة النظر هذه. هناك طريقة للخروج من كتلة المحاولة دون تنفيذ الكتلة أخيرًا. إذا كان الكود ينفذ نظامًا.