جلسه شماره 71رایگان

Java Exception(custom exception)

00:08:41

توضیحات جلسه

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

جزوه و مستندات

مفاهیم کلیدی

  • 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، استفاده کنید تا Constructorهای موردنیاز را به‌سرعت از کلاس پدر فراخوانی کرده و به کلاس خود اضافه کنید.