Farzad Afi Logo

FarzadAfi

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

Java Exception(custom exception)

📖توضیحات درس

🎥 این ویدیو قسمت شصت و چهارم از بوت‌کمپ رایگان جاواست. 📚 نحوه ساخت Custom Exception در جاوا در این جلسه سراغ یکی از مباحث مهم مدیریت استثناها در جاوا می‌ریم: Custom Exception. درسته که جاوا خودش کلی Exception داره، اما گاهی پروژه‌ها نیاز دارن که Exception های مخصوص خودشون رو بسازن و مدیریت کنن ⚡ در این ویدیو یاد می‌گیریم که چرا و چگونه می‌تونیم Exception های شخصی‌سازی شده ایجاد کنیم و ازشون در پروژه‌های واقعی استفاده کنیم 🛠️ در این ویدیو بررسی می‌کنیم: 💡 چرا نیاز به تعریف Custom Exception داریم 📝 نحوه تعریف و ساخت Custom Exception در جاوا 🔁 مرور و جمع‌بندی نکات مهم 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار 🚀
00:08:41🎯رایگان

📄جزوه

مفاهیم کلیدی

  • Custom Exception استثناهایی که توسط برنامه‌نویس برای مدیریت شرایط خاص در منطق برنامه (Business Logic) تعریف می‌شوند تا جایگزین استثناهای عمومی جاوا گردند.

  • Unchecked Exception استثناهایی که از کلاس RuntimeException ارث‌بری می‌کنند. این استثناها در زمان کامپایل توسط کامپایلر چک نمی‌شوند و اجباری برای مدیریت آن‌ها (Handling) در لحظه کدنویسی وجود ندارد.

  • Checked Exception استثناهایی که مستقیماً از کلاس Exception ارث‌بری می‌کنند. برنامه‌نویس موظف است این استثناها را در کد مدیریت کرده یا در سیگنچر متد با استفاده از کلمه کلیدی throws اعلام کند.

  • Inheritance (ارث‌بری) مکانیسمی که در آن یک کلاس ویژگی‌ها و رفتارهای کلاس دیگری را به ارث می‌برد؛ برای ساخت یک Custom Exception حتماً باید از کلاس‌های Exception یا RuntimeException ارث‌بری کرد.

  • Constructor متد ویژه‌ای در کلاس که هم‌نام با کلاس است و برای مقداردهی اولیه شیء استفاده می‌شود. در استثناهای شخصی‌سازی شده، از Constructor برای پاس دادن پیام خطا به کلاس پدر (super) استفاده می‌شود.

موارد مصاحبه ای

  • چرا باید از Custom Exception استفاده کنیم؟ برای افزایش خوانایی (Readability) و قابلیت نگهداری (Maintainability) کد. استفاده از نام‌های دقیق (مانند InsufficientBalanceException) به جای استثناهای عمومی (مانند ArithmeticException) باعث می‌شود دلیل بروز خطا برای توسعه‌دهندگان دیگر کاملاً شفاف باشد.

  • تفاوت در ساخت استثنای Checked و Unchecked چیست؟ اگر کلاس ما از RuntimeException ارث‌بری کند، یک استثنای Unchecked ساخته‌ایم. اما اگر مستقیماً از کلاس Exception ارث‌بری کند، یک استثنای Checked ایجاد شده است که مدیریت آن اجباری است.

  • استاندارد نام‌گذاری Custom Exceptionها چیست؟ بر اساس قراردادهای کدنویسی جاوا، نام کلاس‌های استثنا باید حتماً با کلمه Exception ختم شود؛ مانند InvalidAgeException.

  • چگونه پیام خطا (Message) را در استثنای شخصی‌سازی شده نمایش دهیم؟ باید یک Constructor در کلاس خود تعریف کنیم که یک String به عنوان پیام دریافت کرده و آن را با استفاده از دستور super(message) به سازنده کلاس پدر منتقل کند.

سناریو کاربردی

فرض کنید در حال توسعه یک سیستم بانکی هستید. اگر کاربری بخواهد مبلغی بیش از موجودی خود برداشت کند، استفاده از استثناهای عمومی جاوا مثل IOException یا ArithmeticException باعث گمراهی می‌شود.

برای حل این مشکل، یک کلاس به نام InsufficientBalanceException ایجاد می‌کنیم که از RuntimeException ارث‌بری می‌کند. در زمان انجام تراکنش، اگر موجودی کافی نبود، با دستور throw new InsufficientBalanceException("Balance is low") این استثنا را پرتاب می‌کنیم. این کار باعث می‌شود هر کسی که کد را می‌خواند یا در کنسول خطا را می‌بیند، بلافاصله متوجه شود که مشکل مربوط به "عدم کفایت موجودی" است.

بیشتر بدانید

  • توصیه کدنویسی در ایجاد Custom Exception زیاده‌روی نکنید. اگر یک مشکل با ساختارهای کنترلی ساده مانند if-else قابل حل است، نیازی به ساخت کلاس استثنای جدید نیست. زمانی سراغ این قابلیت بروید که نیاز به مدیریت خطای خاصی در سطوح مختلف برنامه دارید.

  • سازماندهی پروژه در پروژه‌های بزرگ، بهتر است یک package مجزا به نام exception ایجاد کرده و تمام استثناهای شخصی‌سازی شده پروژه را در آنجا قرار دهید تا دسترسی به آن‌ها آسان‌تر باشد.

  • IDE Tip در محیط IntelliJ IDEA، می‌توانید از قابلیت Generate (با کلید میان‌بر Alt + Insert) استفاده کنید تا سازنده‌های (Constructors) مورد نیاز را به سرعت از کلاس پدر فراخوانی کرده و به کلاس خود اضافه کنید.