Java Exception(finally)
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
بلوک
finallyبنایی در مدیریت استثناها که تضمین میکند کدهای داخل آن تحت هر شرایطی (چهExceptionرخ دهد و چه ندهد) پس از بلوکهایtryوcatchاجرا شوند. -
مدیریت منابع (Resource Management) فرآیند آزادسازی منابعی مانند اتصالات دیتابیس (
Database Connections) یا فایلها که پس از اتمام کار باید حتماً بسته شوند تا از نشت حافظه یا اشغال بیهوده منابع جلوگیری شود. -
Checked Exceptionنوعی از استثناها در جاوا که کامپایلر وجود آنها را بررسی میکند و برنامهنویس موظف است آنها را باtry-catchمدیریت کرده یا در امضای متد اعلام (Specify) کند.
موارد مصاحبه ای
-
آیا بلوک
finallyدر صورت وجود دستورreturnباز هم اجرا میشود؟ بله، حتی اگر در بلوکtryیاcatchدستورreturnوجود داشته باشد، جاوا ابتدا کدهای داخلfinallyرا اجرا کرده و سپس مقدار را برمیگرداند. -
هدف اصلی از معرفی بلوک
finallyچیست؟ جلوگیری از تکرار کد (Code Duplication) و اطمینان از اجرای کدهای حیاتی مانند بستن منابع، فارغ از موفقیت یا شکست عملیات اصلی. -
تفاوت اجرای برنامه با
finallyو بدون آن در مدیریت منابع چیست؟ بدونfinallyمجبوریم کد بستن منابع را هم در انتهای بلوکtryو هم در داخل بلوکcatchبنویسیم، اما باfinallyاین کار فقط یکبار و با اطمینان کامل انجام میشود. -
آیا نوشتن بلوک
finallyاجباری است؟ خیر، استفاده از آن اختیاری است اما برای مدیریت صحیح منابع و نوشتن کد استاندارد، استفاده از آن ضروری محسوب میشود.
سناریو کاربردی
در این آموزش، سناریوی ساخت یک جدول در دیتابیس PostgreSQL بررسی شده است. وقتی میخواهیم با استفاده از متد executeUpdate یک جدول ایجاد کنیم، دو حالت ممکن است رخ دهد:
۱. جدول وجود ندارد و با موفقیت ساخته میشود.
۲. جدول از قبل وجود دارد و یک SQLException رخ میدهد.
بدون استفاده از finally برای اینکه مطمئن شویم شیء PreparedStatement حتماً بسته میشود، باید متد .close() را هم در انتهای مسیر موفقیتآمیز و هم در بلوک catch بنویسیم. اما با استفاده از finally تمامی این منطق تکراری حذف شده و دستور بسته شدن منبع در یک جای واحد قرار میگیرد که تحت هر دو شرایط (ساخته شدن جدول یا خطا به دلیل تکراری بودن) اجرا میشود.
بیشتر بدانید
-
تکنولوژی جایگزین در نسخههای جدیدتر جاوا، قابلیتی به نام
try-with-resourcesمعرفی شده است که مدیریت منابع و بستن خودکار آنها را بسیار سادهتر و کوتاهتر از بلوکfinallyانجام میدهد. -
نکته دیباگ استفاده از متد
printStackTrace()بر روی شیءExceptionدر لایههای توسعه به شما کمک میکند تا جزئیات دقیق خطا و مسیر رخ دادن آن را در کنسول مشاهده کنید. -
مدیریت خطای داخلی توجه داشته باشید که خودِ دستور
.close()برای منابعی مثلConnectionممکن استExceptionپرتاب کند، بنابراین گاهی لازم است داخل بلوکfinallyنیز از یکtry-catchداخلی استفاده کنید.
