الأسباب والسيناريوهات لاستخدام المحاولة وأخيراً عدم استخدام الصيد
في مجموعة أدوات Concurrency JDK ، تستخدم العديد من معالجة الاستثناءات الهيكل التالي ، مثل AbstractExecutorService ، أي أنه لا توجد محاولة إلا في النهاية.
الفئة X {Private Final REENTRANTLOCK = New REENTRANTLOCK () ؛ Unlock ()}}}لماذا تستخدم هذا الهيكل؟ ما هي الفوائد؟ انظر إلى الكود التالي أولاً
public void testryandfinally (اسم السلسلة) {try {name.length () ؛ // nullpointerxception} أخيرًا {system.out.println ("aa") ؛نتيجة التنفيذ لتمرير NULL هي: طباعة AA على وحدة التحكم ورمي nullpointerxception. تتمثل عملية التنفيذ أولاً في تنفيذ كتلة المحاولة ، وتنفيذ الكتلة أخيرًا بعد حدوث استثناء ، وأخيراً رمي استثناءً في المحاولة إلى المتصل. تكون نتيجة التنفيذ هذه أمرًا طبيعيًا للغاية ، لأنه لا يوجد معالج استثناء للقبض ، يمكن لجميع الأساليب فقط إلقاء الاستثناء الذي تم إنشاؤه في الخارج ؛
ما هي فوائد هذا النهج؟ بالنسبة إلى Testryandfinally ، فإنه يفعل ما يجب القيام به ويلقي استثناءات أنه لا يمكنه التعامل معها ؛ بمعنى آخر ، يدرك هذا الهيكل فصل المسؤوليات ، ويدرك فصل معالجة الاستثناءات وتنظيف الاستثناء ، ويتيح طرقًا مختلفة للتركيز على ما ينبغي أن يفعلوه. إذن متى يجب استخدام المحاولة ، ومتى يتم استخدام المحاولة-فالنيكي؟ من الواضح أن ذلك يعتمد على ما إذا كانت الطريقة نفسها يمكنها التعامل مع الاستثناءات التي تظهر في المحاولة. إذا تمكنت من التعامل معها بنفسك ، فالتقاطها مباشرة دون رميها إلى المتصل بالطريقة ؛ . وهذا يعني ، استثناءً من أن الرميات قد تظهر في توقيع الطريقة ولا يمكن التعامل معها بمفردها ، ولكن تفعل ما يجب عليك فعله ضمن الطريقة.
الوضع الذي لن يتم فيه تنفيذ البيان أخيرًا
الموقف الوحيد الذي لن يتم فيه تنفيذ بيان Java أخيرًا هو أن طريقة System.exit () المستخدمة لإنهاء البرنامج يتم تنفيذها أولاً.
اختبار الفئة العامة {public static void (string [] args) {try {system.out.println ("start") ؛ } system.out.println ("end") ؛نتيجة الإخراج هي:
يبدأ
بالطبع ، إذا تم قطع السلطة فجأة عند تنفيذ بيان المحاولة العامة بدون بيان System.exit () ، فستنتهي جميع العمليات ولن يتم تنفيذ البيان أخيرًا.