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