Java Exception Intro | معرفی اکسپشن در جاوا
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
- Exception
رویداد یا استثنایی که جریان عادی دستورالعملهای برنامه را مختل میکند. در جاوا، هر Exception یک شیء (Object) از کلاس Throwable است که اطلاعاتی درباره نوع خطا، پیام توصیفی و Stack Trace (محل دقیق وقوع خطا) را در خود دارد.
- Error
نشاندهنده مشکلات جدی و غیرقابل بازیابی در سطح سیستم یا JVM است. این خطاها معمولاً بهدلیل مسائل سختافزاری یا کمبود منابع سیستمی رخ میدهند و برنامه نباید سعی در مدیریت آنها داشته باشد.
- Stack Trace
گزارشی است که جزئیات سلسلهمراتب فراخوانی متدها تا لحظه وقوع خطا را نشان میدهد. این گزارش به برنامهنویس کمک میکند دقیقاً متوجه شود خطا در کدام خط و در کدام کلاس رخ داده است.
- Checked Exception
استثناهایی هستند که توسط کامپایلر جاوا در زمان کامپایل بررسی میشوند. برنامهنویس مجبور است این استثناها را با استفاده از بلوکهای مدیریت خطا هندل کند، یا در امضای متد با کلیدواژه throws اعلام نماید (مانند خطاهای مربوط به فایل یا دیتابیس).
- Unchecked Exception
استثناهایی که در زمان کامپایل توسط کامپایلر بررسی نمیشوند و معمولاً ناشی از اشتباهات منطقی در کدنویسی هستند. این استثناها فرزند کلاس RuntimeException هستند (مانند تقسیم بر صفر یا دسترسی به ایندکس خارج از محدوده آرایه).
- Throwable
کلاس ریشه برای تمام استثناها و خطاها در زبان جاوا است. هر چیزی که بتوان آن را بهعنوان یک وضعیت غیرعادی در برنامه «پرتاب» کرد، باید فرزند این کلاس باشد.
موارد مصاحبه ای
- تفاوت اصلی بین
ExceptionوErrorدر جاوا چیست؟
Exceptionها برای شرایطی طراحی شدهاند که برنامه پتانسیل بازیابی و ادامه فعالیت را دارد؛ بنابراین هندل کردن آنها توصیه میشود. اما Errorها نشاندهنده مشکلات عمیق سیستمی هستند (مانند StackOverflowError یا OutOfMemoryError) و برنامه نباید سعی در مدیریت آنها داشته باشد، زیرا سیستم ناپایدار شده است.
- تفاوت بین
CheckedوUnchecked Exceptionچیست؟
استثناهای Checked در زمان کامپایل بررسی میشوند و مدیریت آنها اجباری است (مانند IOException). استثناهای Unchecked یا Runtime در زمان کامپایل بررسی نمیشوند و معمولاً بهدلیل باگهای منطقی برنامهنویس رخ میدهند (مانند NullPointerException).
- چرا هندل کردن استثناها (
Exception Handling) اهمیت دارد؟
اگر استثناها مدیریت نشوند، برنامه بهمحض مواجهه با کوچکترین خطا کرش کرده و متوقف میشود. با هندل کردن صحیح میتوان تجربه کاربری بهتری ایجاد کرد، منابع را بهدرستی آزاد نمود و از توقف کامل برنامه جلوگیری کرد.
- اگر یک
Exceptionرخ دهد و مدیریت نشود، چه اتفاقی برای خطوط بعدی کد میافتد؟
بهمحض وقوع یک استثنای مدیریتنشده، اجرای برنامه در همان نقطه متوقف میشود و هیچیک از دستورات و خطوط بعدی اجرا نخواهند شد.
سناریو کاربردی
فرض کنید برنامهای دارید که قرار است دادهای را از یک فایل بخواند و سپس محاسباتی روی آن انجام دهد.
۱. بدون مدیریت استثنا:
اگر فایل روی دیسک وجود نداشته باشد، برنامه با خطای FileNotFoundException روبهرو میشود و بلافاصله کرش میکند. در نتیجه، بخش محاسبات و سایر قسمتهای برنامه هرگز اجرا نمیشوند.
۲. با مدیریت استثنا:
برنامهنویس پیشبینی میکند که ممکن است فایل وجود نداشته باشد؛ بنابراین آن را هندل میکند. در صورت نبود فایل، برنامه بهجای بسته شدن، یک پیام مناسب به کاربر نمایش میدهد یا از یک فایل جایگزین استفاده میکند و به کار خود ادامه میدهد.
مثالهای رایج دیگر:
- تقسیم بر صفر (
ArithmeticException):
در یک ماشینحساب، اگر کاربر عددی را بر صفر تقسیم کند، برنامه نباید بسته شود؛ بلکه باید پیغام «خطای ریاضی» نشان دهد.
- دسترسی به آرایه:
اگر آرایه ۵ خانه دارد و شما بخواهید خانه دهم را بخوانید، ArrayIndexOutOfBoundsException رخ میدهد که باید برای جلوگیری از توقف برنامه مدیریت شود.
بیشتر بدانید
- نکته سلسله مراتبی
در ساختار جاوا، Error و Exception هر دو فرزند کلاس Throwable هستند. همچنین RuntimeException خود زیرمجموعه Exception است و تمام استثناهای Unchecked از آن مشتق میشوند.
- نکته منطقی
استثناهای Unchecked (مانند NullPointerException) معمولاً نشانه این هستند که کد شما نیاز به بازنگری منطقی دارد. برای مثال، قبل از صدا زدن یک متد روی یک شیء، باید مطمئن شوید که آن شیء null نیست.
- نکته طراحی
هندل کردن Errorها (مانند مشکلات حافظه) ممکن است در برخی موارد امکانپذیر باشد، اما این کار بهشدت نهی شده است؛ زیرا در آن لحظه سیستم ناپایدار است و ادامه کار برنامه میتواند منجر به نتایج فاجعهبارتری شود.
