Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Java Exception(finally)

📖توضیحات درس

🎥 این ویدیو قسمت شصت و دوم از بوت‌کمپ رایگان جاواست. 📚 آشنایی کامل با بلوک finally در جاوا در این جلسه سراغ یکی از مفاهیم مهم و کاربردی در مدیریت استثناها (Exception Handling) می‌ریم: بلوک finally. با هم بررسی می‌کنیم این بلوک دقیقاً چیه، چرا بهش نیاز داریم و چطور می‌تونه کدهای ما رو تمیزتر و حرفه‌ای‌تر کنه 💡 در ابتدا به صورت تئوری مفهوم finally رو توضیح می‌دیم تا بدونیم چه زمانی اجرا می‌شه و چه نقشی در کنار try و catch داره. بعدش با یک نمونه‌کد عملی بدون finally می‌بینیم که چطور ممکنه تکرار کدها به وجود بیاد. در ادامه هم همون مثال رو با استفاده از بلوک finally ریفکتور می‌کنیم تا تفاوتش رو به‌صورت واضح ببینیم. در پایان هم با هم یه مرور کلی خواهیم داشت تا مفاهیم بهتر در ذهنت تثبیت بشه. 🔁 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، داخل گروه بپرس؛ من یا مربی‌های گروه در سریع‌ترین زمان کمکت می‌کنیم 🤝 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار
00:20:05🎯رایگان

📄جزوه

مفاهیم کلیدی

  • بلوک 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 داخلی استفاده کنید.