Java Exception(throw_throws)
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
throw کیوردی که برای پرتاب صریح یک
Exceptionدر داخل بدنه کد استفاده میشود. زمانی که برنامهنویس تشخیص میدهد شرایط غیرعادی پیش آمده، با استفاده از این کیورد روند عادیmethodرا مختل کرده و یک استثنا پرتاب میکند. -
throws کیوردی که در امضای (
Signature) متد نوشته میشود تا اعلام کند اینmethodممکن است یک یا چند استثنا پرتاب کند. این کیورد مسئولیت مدیریت استثنا را به لایههای بالاتر (فراخوانکننده متد) واگذار میکند. -
Checked Exception استثناهایی که کامپایلر جاوا بررسی آنها را الزامی میداند. در صورت استفاده از این نوع استثناها، حتماً باید یا از
try-catchاستفاده شود یا با استفاده از کیوردthrowsدر امضای متد اعلام گردند. -
Unchecked Exception استثناهایی که از کلاس
RuntimeExceptionارثبری میکنند. ذکر این استثناها در امضای متد با استفاده ازthrowsاختیاری است و کامپایلر کاربر را مجبور به مدیریت آنها نمیکند. -
Exception Propagation فرآیندی که در آن یک استثنا از پایینترین سطح فراخوانی (مثلاً یک متد داخلی) به سمت لایههای بالاتر (مانند متد
main) پرتاب میشود تا زمانی که یک لایه مسئولیت هندل کردن آن را بر عهده بگیرد.
موارد مصاحبه ای
-
تفاوت اصلی throw و throws در چیست؟
throwبرای پرتاب یک استثنا در بدنه کد (مانند یک دستور اجرایی) به کار میرود، اماthrowsدر امضای متد برای اعلام احتمال وقوع استثنا و انتقال مسئولیت هندل کردن آن استفاده میشود. -
آیا استفاده از throws برای تمام استثناها الزامی است؟ خیر؛ استفاده از این کیورد فقط برای
Checked Exceptionsالزامی است. برایUnchecked Exceptions(مانندArithmeticException) استفاده از آن اختیاری است. -
قانون throws در ارثبری (Inheritance) چیست؟ اگر متد کلاس پدر استثنای خاصی را پرتاب نکند، متد کلاس فرزند (در صورت
Overrideکردن) نمیتواند استثنایCheckedجدیدی پرتاب کند. همچنین، کلاس فرزند حق ندارد استثنایی گستردهتر (Broader) از استثنای کلاس پدر پرتاب کند و فقط میتواند استثناهای محدودتر (Subclass) را اعلام نماید. -
شباهت throw با return در چیست؟ هر دو کیورد باعث توقف ادامه اجرای کدهای آن
methodمیشوند. با این تفاوت کهreturnدر شرایط عادی و برای برگرداندن مقدار استفاده میشود، اماthrowدر شرایط غیرعادی و برای اعلام خطا.
سناریو کاربردی
در ویدیو سناریوی اعتبارسنجی سن کاربر بررسی شده است. فرض کنید برنامهای برای صدور گواهینامه دارید:
۱. سن کاربر دریافت میشود.
۲. یک متد به نام validateAge طراحی شده که سن را بررسی میکند.
۳. اگر سن کمتر از ۱۸ سال باشد، برنامهنویس با استفاده از throw new IllegalArgumentException() عمداً یک استثنا پرتاب میکند تا روند برنامه متوقف شود و پیام خطا صادر گردد.
۴. اگر سن ۱۸ یا بیشتر باشد، برنامه بدون مشکل ادامه یافته و پیام موفقیت چاپ میشود.
این مثال نشان میدهد که چگونه throw میتواند برای کنترل منطق برنامه در شرایط غیرمجاز استفاده شود.
بیشتر بدانید
-
نکته معماری پاس دادن مداوم استثناها به لایههای بالاتر با
throwsتا رسیدن به متدmainتمرین اشتباهی است. در نهایت باید در یک لایه مناسب، استثنا باtry-catchمدیریت شود تا برنامه به صورت ناگهانی بسته نشود. -
Custom Exceptions اگرچه میتوان از استثناهای آماده جاوا مانند
ArithmeticExceptionاستفاده کرد، اما برای خوانایی بیشتر و مدیریت دقیقتر، بهتر است استثناهای اختصاصی (Custom Exceptions) برای سناریوهای خاص خود بسازید. -
IDE Tip در محیط
IntelliJاگر از یک متد استفاده کنید کهChecked Exceptionپرتاب میکند، محیط توسعه با خطای قرمز به شما هشدار میدهد و با استفاده از میانبرهای پیشنهادی میتوانید به سرعتtry-catchیاthrows signatureرا به کد خود اضافه کنید.
