بررسی انواع ارورها در زبان برنامه نویسی جاوا


پس از آشنایی با مفاهیم شیئ گرایی در برنامه نویسی، مسئله ای که می تواند برای برنامه نویسان مبتدی مفید واقع شود را مطرح خواهیم که عبارت است از Error هایی که ما در برنامه نویسی با آن ها مواجه خواهیم شد.

ارورها در زبان برنامه نویسی جاوا به چند دسته تقسیم می شوند: گروه اول ارورهایی هستند که از نوع Compile-time Error می باشند. به طور مثال دستور ;()system.out.println در مقایسه با ;()System.out.println اشتباه است چرا که حرف اول واژه system به صورت کوچک نوشته شده است و همین مسئله موجب می گردد که برنامه کامپایل نشود. خبر امیدوار کننده اینجا است که این گروه از مشکلات توسط نرم افزار اکلیپس که برنامه خود را با آن می نویسیم تشخیص داده شده و به ما اخطار داده می شوند و به سادگی می توان آن را رفع کرد. برای روشن شدن این مطلب به ذکر چند مثال تصویری به همراه توضیحات خواهیم پرداخت.

همان طور که در آموزش های قبلی فرا گرفتیم، پروژه ای در محیط برنامه نویسی جاوا ایجاد کرده و یک کلاس با نام CompileTimeErrors یا هر نام دیگری در آن ایجاد می کنیم (فقط به خاطر داشته باشیم که نام کلاس ما با نام فایل java. که می سازیم دقیقاً یکی باشد که در غیر این صورت برنامه ما با مشکل مواجه خواهد شد.) پس از ایجاد پروژه، می بایست کدی مشابه کد زیر داشته باشیم:

public class CompileTimeErrors {
    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    }
}

در ادامه می خواهیم جمله This is a Compile time error را داخل کنسول نمایش دهیم پس می بایست کد خود را به شکل زیر ویرایش نماییم (لازم به ذکر است که کامنت های کد که هیچ تاثیری در نحوه ی اجرای برنامه ما ندارند را حذف می کنیم):

public class CompileTimeErrors {
    public static void main(String[] args) {
        System.out.println("This is a Compile time error");
    }
}

در واقع کد فوق یک برنامه کامل و صحیح جاوا است که بدون هیچ مشکلی اجرا خواهد شد. در این جا ما قصد داریم تا عمداً تغییری در کد ایجاد کنیم تا کامپایلر از ما ایراد بگیرد. به همین منظور واژه out که می بایست حتماً با حروف کوچک نوشته شود را به صورت OUT می نویسیم. به محض این که ما واژه ی out را به OUT تغییر دهیم و برنامه را مجدد کامپایل کنیم، با خروجی زیر مواجه خواهیم شد:

ما در تصویر فوق از روی دو مورد می توانیم متوجه شویم که برنامه ما دارای ارور است. محیط برنامه نویسی اکلیپس دور واژه ی مشکل زا که در اینجا OUT است یک نقطه چین قرار داده است. از سوی دیگر در کنار نام فایل CompileTimeError.java علامت هشداری مشاهده می شود که نشانگر ایرادی در برنامه است. حال با قرار دادن نشانگر موس خود روی واژه OUT اکلیپس پیامی را به ما نشان می دهد که به شکل زیر است:

این یکی از بخش های لذت بخش کار کردن با نرم افزار اکلیپس است. این محیط برنامه نویسی قدرتمند مشکل را پیدا کرده و در جهت رفع آن تعدادی پیشنهاد می دهد (در اینجا صرفاً یک پیشنهاد بیشتر به ما نمی دهد چرا که مشکل خیلی پیچیده نیست!) چنانچه به خط آبی رنگ توجه کنیم، می بینیم که به ما پیشنهاد می شود که واژه OUT را به out تغییر دهیم که با این کار مشکل ما رفع خواهد شد. لازم به ذکر است که مثال فوق به منزله یکی از ساده ترین انواع ارورها در زبان برنامه نویسی جاوا است. در واقع یکسری از ارورها هستند که تا حدودی پیچیده تر اند و اکلیپس برای رفع مشکل، بیش از یک مورد به ما پیشنهاد می دهد که در چنین حالتی کار ما به عنوان برنامه نویس این است که تک تک پیشنهادات را مورد بررسی قرار داده و سپس تغییر مورد نیاز را اعمال کنیم.

نوع دیگر از ارورها تحت عنوان Unchecked Runtime Exception شناخته می شوند. در این صورت ما هیچ گونه Compile-time Error نداریم اما برنامه هم به طور کامل اجرا نمی شود. در واقع برنامه ای که ما نوشته ایم کاری را از جاوا می خواهد انجام دهد که جاوا از انجام آن ناتوان است. به طور مثال فرض کنیم که ما یک متغییر از جنس int داریم که مقدار اختصاص داده شده به آن 1,000,000 است. در حین نوشتن برنامه ما با هیچ گونه مشکلی مواجه نخواهیم شد اما به محض اینکه اقدام به کامپایل کردن برنامه می کنیم، ارور دریافت می کنیم. در مثال فوق اشکال کار در اینجا است که ما مابین ارقام یک کاما قرار داده ایم از این رو جاوا قادر به کامپایل کردن برنامه نخواهد بود. به منظور رفع این مشکل می بایست عدد فوق را به 1000000 تبدیل کنیم. در حقیقت نرم افزار اکلیپس از درک اینکه این مسئله می تواند در حین اجرا مشکل زا باشد عاجز است (در نت بینز اجازه تعریف همچین مقداری به کاربر داده نمی شود و خطا می دهد.)

برای روشن تر شدن این مسئله مثالی از دنیای واقعی می زنیم. فرض کنیم که شما از شخصی آدرس می پرسید. آن شخص به شما می گوید که مستقیم بروید تا به یک چهار راه برسید سپس به سمت راست بروید و رو به روی شما یک سینما قرار دارد. حال شما همان طور که آن شخص گفت مسیر را طی می کنید. مستقیم می روید. به چهار راه که رسیدید به سمت راست می روید. به رو به رو که نگاه می کنید به جای یک سینما یک دیوار سیمانی رو به روی شما قرار دارد! به عبارت دیگر شما از اول نمی دانستید که آدرسی که به شما داده شده است اشتباه است. زمانی که اینگونه ارورها اتفاق می افتند نیز قضیه به همین شکل است. از بدو امر جاوا نمی داند که در حین اجرای برنامه در وسط کار مشکلی قرار است اتفاق افتد از همین رو نمی تواند پیش بینی کند که برنامه در حین کامپایل شدن با مشکل مواجه خواهد شد.

دسته دیگری از ارورها از نوع Logical یا منطقی هستند. در چنین مواقعی نرم افزار اکلیپس هیچ گونه خطایی را نشان نخواهد داد و برنامه هم به طور کامل اجرا خواهد شد اما پاسخی که نرم افزار قرار بود به ما بدهد صحیح نیست. فرض کنیم در مثال فوق شخصی که به ما آدرس می دهد به جای این که به ما بگوید به سمت راست برویم بگوید که به سمت چپ برویم. این دسته از ارورها به منزله چالش بر انگیزترین ارورهای موجود در برنامه نویسی می باشند به طوری که رفع کردن آن ها هم ممکن است با دشواری زیادی همراه باشد (شاید مجبور باشید هفته ها وقت صرف کنید تا مشکل را بیابید!) نکته ای که بایستی مد نظر قرار داده شود این است که بسیاری از این دست از ارورها در بیشتر مواقع اصلاً مورد توجه قرار نمی گیرند و در آینده مشکلات زیادی را برای برنامه نویس به بار خواهند آورد.

دسته آخر از ارورها که بهتر است نام آن ها را ارور نگذاریم بلکه آن ها را Warning یا هشدار بنامیم تحت عنوان Compile-time Warning شناخته می شوند. به طور کلی این دسته از هشدارها به مهمی ارورها نمی باشند. در واقع زمانی که محیط برنامه نویسی اکلیپس شاهد مسئله مشکوکی باشد، یک آیکون زرد رنگ با علامت تعجب مقابل خطی که به آن مشکوک است نمایش می دهد. به مثال زیر توجه فرمایید:

در مثال فوق، ما یک متغییر از جنس عدد صحیح یا int ایجاد کرده ایم که نام آن test است و مقداری معادل با 100 هم برای آن در نظر گرفته ایم. در مقابل خطی که متغییر در آن قرار دارد یک علامت زرد رنگ با یک علامت تعجب قرار دارد. به عبارت دیگر، این یک هشدار از طرف نرم افزار اکلیپس است که می خواهد به ما بگوید که این متغیر در هیچ کجای برنامه مورد استفاده قرار نگرفته است و دیگر این که آیا مطمئن هستید که می خواهید این متغیر را در سورس کد خود نگه دارید. در حقیقت، هر موقع که ما با چنین هشدارهایی مواجه شویم می توانیم نشانگر موس خود را روی آن علامت زرد رنگ نگه داشته و پیشنهادی که اکلیپس به ما می دهد را مطالعه کنیم. به تصویر زیر توجه کنید:

نوشته ای که در قسمت زرد رنگ دیده می شود حاکی از آن است که مقدار متغیری تحت عنوان test در هیچ کجای برنامه مورد استفاده قرار نگرفته است.

به خاطر داشته باشید
به طور کلی مشکلات برنامه نویسی اصطلاحاً Bug نامیده می شوند و فرایند مشکل یابی و رفع آن ها اصطلاحاً Debugging نامیده می شود که تسلط به Debugging خیلی می تواند ما را در برنامه نویسی کمک کند.
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
kate
kate
🙏 عالی
hmdshariati
hmdshariati
مثال‌هاتون خیلی خوبه... موضوع قابل لمس می‌شه برام ممنون
کاربر میهمان
کاربر میهمان
سلام من یه چند وقتیه یه کتاب در مورد جاوا دارم یاد میگیرم که خیلی خوبه و تقریبا می تونم بگم بسیاری از مسائل جاوا از پایه به بالا حالا تا چه سطحی رو نمیدونم یاد داده کتاب جعفر نژاد قمی از انتشارات علوم رایانه که بعضی وقت ها هم هست که نامفهوم توضیح میده و در کنار سایت هایی خوب برنامه نویسی مثل سکان آکادمی میشه خوب یاد گرفت گفتم یه کمی بهتون کرده باشم سایت علوم رایانه هم که ناشر این کتاب هست اینه olomrayaneh.net میتونید قیمت کتاب رو هم بصورت فیزیکی و هم pdf ببینید و جالبه که نسخه pdf هم برای خرید وجود داره توصیه می کنم قبل از خرید برید از یه کتابخونه ای اطرافتون کتابو بگیرید مطالعه کنید تا ببینید چجوریه بدردتون میخوره یا نه و آیا باهاش راحتید؟؟!!
با تشکر از شما.
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
جالبه که بدونید این کتاب برنامه نویسی سوئیفت رو آموزش میده برای ساختن برنامه هایی برای دیوایس های IOS ـی ، هزینه این کتاب 34 هزار تومان هست ، اما مترجمش فایل الکترونیکیشو توی همون سایت به رایگان برای دانلود گذاشته : اینم از لینک سایتش ، توی قسمتهای پایینش ببینید میشه بصورت رایگان دانلودشون کرد . http://www.olomrayaneh.net/BookInfo.aspx?bookID=290&cat=E

در پاسخ به

swpkadl
swpkadl
سلام این علامت تعجب قرمز رنگ چیه چطور میشه خطاش را برطرف کرد این علامت تعجب قرمز بدون لامپ است
مثلا من این کد رو می نویسم
; i = /2 ! این علامت رو میاره
تو رو خدا کمک کنید
عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
خب شما به اشتباه نوشتید دیگه . آی برابر تقسیم بر دو که معنی ای نداره . شما باید مثلا اینجوری بنویسید : آی برابر 2 ; شما در این مرحله نمیتونید از علامت تقسیم استفاده کنید ، به این خاطر براتون ارور داده

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام‌خسته نباشید کتابی فارسی برای برنامه نویسی جاوا میتونید معرفی کنید
مطالبتونم‌خوبن ممنون بابتشون
Lemony
Lemony
توضیحاتتون فوق العاده هست و هر کسی و با هر سنی متوجه میشه
ممنون از سایت خوبتون
amin
amin
عالی
amin
amin
عالی
fighter
fighter
در خط دوم : مطرح خواهیم کرد : درست شود
کاربر میهمان
کاربر میهمان
آقای مرادی خیلی مردی..
فقط همینو میتونم بگم..
کاربر میهمان
کاربر میهمان
موفق و موید باشید، بسیار عالی و روان هست مطالب
saeedprz
saeedprz
وججججدانا باورش مشکل همچین اموزشی مجانی باشه. دمیون گرم
به آمد
به آمد
کاش pdf مطالب رو هم میزاشتین ...
ccc ccc
ccc ccc
سلام. امکان قرار دادن آموزش‌ها به صورت PDF وجود نداره. مگر اینکه خودتون به PDF صفحه‌ی سایت و ذخیره کنید.

در پاسخ به

کاربر میهمان
کاربر میهمان
https://codefights.com/
یه سایت خوب برای پیدا کردن باگ توی کد ها
hamid_r_9750
hamid_r_9750
ممنون از آموزشتون.فک نمیکردم جذب این برنامه بشم.
javad
javad
آقا بازم سپاسگذارم
کاربر میهمان
کاربر میهمان
این نوع آموزش همتا نداره فوق العادس
خسته نباشید
دستمریزاد
امیر
امیر
درود و رحمت خداوند بر پدر و مادر برنامه ریزان و مدیران این وب سایت آموزشی که چنین فرزندان آینده نگر و پاک سرشت تحویل جامعه داده اند ...
واقعا دست مریزاد و خدا قوت که این قدر قشنگ و آموزنده مطالب برنامه نویسی رو با مثالهای کاربردی و به صورت رایگان در اختیار جوانان این مرز و بوم قرار میدهید . بنده از کلیه علم آموزان و دانشجویان عزیز که این متن رو میخونند تقاضا مندم که در جهت جبران این لطف ارزنده ، که به صورت رایگان خدمات میدهند یک فاتحه و 14 صلوات به روح اموات دست اندرکاران سایت سکان آکادمی هدیه بدهیم ... این کمترین کاری هست که میتونیم انجام بدهیم
...اللهم صل علی محمد و آل محمد و عجل فرجهم
بهزاد مرادی
بهزاد مرادی مدرس، کپی‌رایتر و دولوپر
امیر جان سلام
این بهترین جبرانی است که می توانست اتفاق بیفتد.
ممنون

در پاسخ به

ادمین سایت
ادمین سایت
سلام و درود بر شما کاربر گرامی
انرژی مثبت شما این دلگرمی را به اعضای سکان آکادمی خواهد داد تا با انرژی بیشتری به تولید علم برای علاقمندان بپردازیم.

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام این اخرین اختار من هروقت منغیر ساختم میده و حتی وقتی بازم متغیر به کار میگیرم درست نمیشه و کار نمیکنه مگه اینکه یکی از پیشنهاد های برنامه به اسم convert local variable to field بزنم چرا؟!
ccc ccc
ccc ccc
سلام
با توجه به پیشنهاد IDE شما باید متغیرتون و عمومی یا Global تعریف کنید. حالا باز هم یه عکس از کدتون قرار بدین تا بهتر بتونم راهنماییم کنم.

در پاسخ به

عیسی پور
عیسی پور
خدا خیرتون بده
هیچ جا مثل شما توضیح ندادن انصافا سایتتون تکه
موفق و پایدار باشید
ادمین سایت
ادمین سایت
سلام
نظر لطف شماست

ارادتمند
تیم سکان آکادمی

در پاسخ به

کاربر میهمان
کاربر میهمان
سپاس فراوان
mohamad reza rostmi
mohamad reza rostmi
توضیحات عالی و جامع
Deijio Delavega
Deijio Delavega
واقعا خیلی عالی مطالب رو توضیح میدین و مورد را روشن میکنید. متشکرم
AliJCVD
AliJCVD
اقا خدا خیرتون بده واقعا خیلی عالی مطالب رو توضیح میدین و برای خواننده روشن میکنید. خیلی ممنون
ادمین سایت
ادمین سایت
نظر لطف شماست

در پاسخ به