+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

در چه مواقعی در یک برنامه جاوا، بلاک finally اجرا نمی شود؟

2 پاسخ

+3 امتیاز
قبل توسط (302 امتیاز)
ویرایش شده قبل توسط
بلاک finally همیشه (حتی وقتی در بلاک های try یا catch  دستور return داشته باشیم) اجرا می شود، بجز زمانی که ما در یکی از بلاک های try یا catch دستور System.exit داشته باشیم، یا به عبارتی finally فقط وقتی اجرا نمیشود که ما برنامه رو قبل رسیدن به اون terminate کنیم.
0 امتیاز
قبل توسط (2.2هزار امتیاز)
ویرایش شده قبل توسط

بلاک finally

بلاک finally شامل دستوراتی برای اجرا پس از اجرای بلاکهای try و catch میباشد، اما قبل از دستوراتی که در ادامه دستورات try…catch می آید اجرا میگردد. استثنا چه ایجاد شود یا نشود به هر صورت بلاک finally اجرا میگردد. اگر یک استثنا ایجاد گردد، حتی اگر بلاک catch استثنا را کنترل نکند، دستورات درون بلاک finally اجرا میگردد.

میتوان برای ساختن اسکریپت مواجه با خطا در هنگام رخ دادن استثنا از بلاک finally استفاده کرد. برای مثال، ممکن است که نیاز به انتشار منبع اسکریپت داشته باشیم. مثال زیر یک فایل را باز میکند و سپس دستورات آن را اجرا میکند ( جاوا اسکریپت سمت سرور به شما اجازه دسترسی به فایلها را میدهد). اگر یک استثنا در هنگام باز شدن فایل رخ بدهد، بلاک finally قبل از اینکه اسکریپت با شکست روبرو شود، فایل را میبندد.

openMyFile();

try {

  writeMyFile(theData); //This may throw a error

} catch(e) {

  handleError(e); // If we got a error we handle it

} finally {

  closeMyFile(); // always close the resource

}

اگر بلاک finally یک مقدار را بازگرداند، این مقدار، بدون در نظر گرفتن عبارات return در بلاکهای try و catch مقدار بازگردانده شده میشود:

function f() {

  try {

    console.log(0);

    throw "bogus";

  } catch(e) {

    console.log(1);

    return true; // تا هنگامی که بلاک finally تمام شوداین عبارت return

                 // به حالت تعلیق در می آید

    console.log(2); // not reachable

  } finally {

    console.log(3);

    return false; // باز نویسی  "return" قبلی

    console.log(4); // دسترس پذیر نیست

  }

  // "return false" الان اجرا میشود

  console.log(5); // دسترس پذیر نیست

}

f(); // alerts 0, 1, 3; returns false

بازنویسی مقادیر بازگشتی توسط بلاک finally در اجرای استثنائات یا اجرای دوباره درون بلاک catch اعمال میشود:

function f() {

  try {

    throw "bogus";

  } catch(e) {

    console.log('caught inner "bogus"');

    throw e; // this throw statement is suspended until

             // finally block has completed

  } finally {

    return false; // overwrites the previous "throw"

  }

  // "return false" is executed now

}


try {

  f();

} catch(e) {

  // this is never reached because the throw inside

  // the catch is overwritten

  // by the return in finally

  console.log('caught outer "bogus"');

}


// OUTPUT

// caught inner "bogus"
قبل توسط (2.2هزار امتیاز)
اینجور که متوجه شدم همیشه اجرا میشود انگار!
قبل توسط (1.1هزار امتیاز)
اگر دقت کرده باشید من در زبان برنامه نویسی جاوا پرسیدم ولی شما برای زبان جاوااسکریپت جواب دادید.

سوالات مشابه

+1 امتیاز
1 پاسخ 1.9هزار بازدید
+3 امتیاز
2 پاسخ 12.8هزار بازدید
+2 امتیاز
2 پاسخ 2.6هزار بازدید
0 امتیاز
0 پاسخ 304 بازدید
+1 امتیاز
1 پاسخ 587 بازدید
...