Nirvana

بررسی Error ها و Exception ها در زبان جاوا .

Nirvana ۱۳۹۷/۰۲/۲۹ زبان برنامه‌نویسی جاوا

دوستان سلام. چند روزه دارم در مورد خطاها تو زبان Java تحقیق می کنم اما هر چه جلوتر میرم بیشتر سردرگم میشم. تمام نت رو زیر و رو کردم اما هیچ منبعی رو نتونستم پیدا کنم که واضح و ساده بیاد اینا رو توضیح بده. حتی مستندات جاوا رو هم در مورد Exception ها خوندم اما خیلی کلی توضیح داده و چیز زیادی دستگیرم نشد. کاربرای stackoverflow هم که از من بدترن. اونا هم بیشتر باشک و تردید, و حدس و گمان در این مورد حرف میزنن. آغا یکی بیاد خیلی ساده و ملوس توضیح بده ببینیم جریان چیه. یعنی از همون اول کلا کلاس Throwable رو بررسی کنیم, Error ها و Exception ها. Checked ها و Unchecked ها. Runtime ها و Compiletime ها. این دسته بندی ها یه خورده گیج کننده ست. دوستان لطفا کمک کنین. ممنون از همگی
پاسخ‌ها به این تاپیک
mostafa
mostafa
۱۳۹۷/۰۲/۲۹
سلام - اول از همه بستگی به تجربتون داره ، شما موقعی که با jdbc کار میکینید و قراره از PreparedStatement استفاده کنید ، واضحه که باید از SqlException استفاده بکنید چون ممکن هستش سینتکس sql شما مشکل داشته باشه یا درایور jdbc شناخته نشده باشه، یا کانفیگ connection شما مشکل داشته باشه و .... ، خیلی از مواقع که قراره در هایبرنیت یک entity رو fetch کنید احتمال null بودن و دریافت NullPointerException وجود داره (مثلا یک کوئری استفاده کنید که قرار هست یوزر با ID 23 رو پیدا کنه درصورتی که چنین یوزری وجود ندارد) در این صورت میتونید RunTimeException رو throw کنید ، حتی میتونید یک exception مخصوص این کار رو خودتون بسازید مثل UserNotFoundException ، اگر چه برای NullPointerException ها از جاوای 8 به بعد optional ها اضافه شدند تا جلوی NullpointerException رو بگیرن ، اگه قراره با IO کار کنید از IOException ها باید استفاده کنید چون احتمالش هست آدرس فایلی که دادی اشتباه باشه یا persmission های اون فایل محدود باشن و... در واقع قسمتهایی از برنامه که شما احتمال میدید ممکنه یک موقع با یک استثنا و خطاهایی رو به رو بشید (مثلا زمانی که شما دارید یک سری message ها رو از یک سرور jms دریافت میکنید ، ولی احتمال هست یک روز به هر دلیلی اون سرور jms کرش کنه) رو باید درون اکسپشن قرار بدید ، جاهای حساس برنامه همیشه IDE ها کمک میکنن که exception ها رو پیاده کنید ، هرچقدر بیشتر برنامه نویسی کنید و بیشتر سروکله بزنید با جاوا ، دستتون میاد که کجاها ممکنه اکسپشن بروز پیدا کنه و مستعد خطا باشه
Nirvana
Nirvana
۱۳۹۷/۰۲/۲۹
ممنون از پاسخ شما جناب mostafa. شما درست میفرمایید. به خصوص با خط اخر پستتون کاملا موافقم اما مشکل بنده اینجا فقط با دسته بندی هاست. اگه لطف کنین یک بار دیگه متن سوال رو بخونین متوجه میشین. مثلا هنوز سر این دعواست که آیا Syntax ارور جزو Exception هاست یا جزو Error هاست. و خیلیام میگن که جزو هیچ کدومشون نیست چون Exception ها و Error ها هر دو در زمان Run رخ میدهند در حالی که Syntax error ها حتی از Compile شدن هم جلوگیری میکنند چه برسد به اینکه در زمان Compile رخ بدهند یا در زمان Run . اما قسمت جالب ماجرا اینجاست که اگه تو IDE کد بنویسی و Syntax error داشته باشی, IDE اخطار Exception بهت میده. یعنی Syntax error رو Exception حساب میکنه.میبینین چقدر گیج کننده ست؟ تازه این فقط یه نمونه ساده ش بود که عرض کردم. بعضی وقتا قضیه خیلی ازین پیچیده تر میشه.بقیه دوستان هم لطفا کمک کنن. ممنون

در پاسخ به

mostafa
mostafa
۱۳۹۷/۰۳/۳۱

سینتکس ارور ها که عموما جزو error ها حساب میشن ، CheckedException ها رو که جاوا برنامه نویس رو مجبور میکنه اونها رو catch کنه ولی در مورد unchecked ها برنامه نویس بیشتر از روی تجربه و سواد خودش تشخیص میده که پیادشون کنه یا نه مثل نوشتن رگولاراکسپریشن و... ، توی زبانهای jvm base جدید مثل groovy ,کاتلین و... حتی برای catch کردن CheckedException ها هم اجبار نیستش برعکس جاوا

در پاسخ به