كيفية الرد على الاسترخاء المكدس عندما لا يتم دعم المدمرين من قبل لغة؟

StackOverflow https://stackoverflow.com/questions/3879755

سؤال

افترض أنك قمت بإنشاء مثيل من Window صف دراسي. يتم عرض النافذة للمستخدم. بعد ذلك ، يتم إلقاء استثناء ، ويتم الإشارة إلى المثيل ، ولكن لا يزال المستخدم النافذة ينظر إليها لأن المثيل لا يزال موجودًا (لم يعد يتم الرجوع إليه بعد الآن).

ماذا تفعل في هذه الظروف؟

أنا أتحدث على وجه التحديد عن لغة البرمجة النصية السنجاب (http://www.squirrel-lang.org/). على عكس Java ، لا يبدو أن لديها finally الكتل أو أساليب النهائيات ، إذن هو معالجة الاستثناء في هذه اللغة؟

هل كانت مفيدة؟

المحلول

لا أعرف السنجاب ، ولكن حتى في غياب كتلة أخيرًا ، يمكنك محاكاة السلوك إلى حد ما داخل جافا:

Exception error = null;
try {
 // do something
}
catch (Exception e) {
  error = e;
}
// My finally code goes here
// ...
if (error != null) {
  // Oh dear clean up all my resources - files, windows, sockets etc.
  throw error;
}

لذا ، تخزن كتلة catch الاستثناء في متغير يمكنك اختباره لاحقًا إذا كنت ترغب في إعادة تجديده ، ولا يزال يتيح لك الفرصة للقيام بتنظيف آخر. من الواضح أن هناك فروقًا دقيقة يجب أن تكون على دراية بها (مثل أنواع الاستثناء الصريحة التي تحتاج إلى معالجة خاصة ، والمزيد من الاستثناءات التي يتم إلقاؤها خارج المحاولة / التقاط) ولكن مع مراعاة بعناية يجب أن تكون بخير.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top