Java Exception(custom exception)
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- 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های موردنیاز را بهسرعت از کلاس پدر فراخوانی کرده و به کلاس خود اضافه کنید.
