کنترل خطا و استثنا ها در جاوا


کنترل خطا و استثنا ها در جاوا
برای خرید این درس نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

آموزش کنترل خطا و استثناها در زبان جاوا:


در این جلسه با مبحث کنترل خطا و استثناها (Exception Handling) در زبان جاوا آشنا می‌شوید. یکی از مهمترین مباحث می‌باشد که در زبان‌های برنامه نویسی مختلف است به آن پرداخته می‌شود و باید به عنوان یک برنامه نویس این مبحث را خیلی خوب یاد بگیریم. در برنامه‌هایی که می‌نویسیم احتمال به وجود آمدن خطا بسیار زیاد است. در واقع یک سری خطاها توسط برنامه نویس یا کاربر اتفاق می‌افتد. ما باید خطاها را  کنترل کنیم که آسیبی بر اجرای برنامه نداشته باشد. در این جلسه  با انوع خطا و کنترل کردن آن‌ها آشنا می‌شوید.
 برخی از این خطاها توسط ما کنترل نمی‌شود و امکان دارد در هر شرایطی اتفاق بیفتد، البته این خطاها خیلی کم هستند. ما یک سری خطا و استثنا داریم. خطا (Error) در واقع خطاهایی هستند که احتمال دارد در هر شرایطی اتفاق بیفتد. اما دسته دوم استثناها  (Exception) هستند که ما می‌توانیم آن‌ها را کنترل کنیم. در واقع معمولا خطاهایی که رخ می‌دهد، امکان دارد علتش در نحوه نوشتار شما باشد مثلا i دستور if را به صورت بزرگ بنویسید یا سمیکالن ته خط را نگذارید. به این مدل خطا، خطاهای نحوی می‌گویند که قبل از کامپایل و اجرای برنامه این اتفاق رخ می‌دهد. دسته دوم خطاهایی هستند که در زمان اجرا رخ می‌دهند.


مثال:
اگر از کلاس file و fileReader استفاده کنیم خود سیستم اخطار می‌دهد که چون با فایل‌ها داخل محیط سیستم عامل کار می‌کنیم احتمال بروز خطا وجود دارد. قبل از اینکه کامپایل صورت بگیرد خود برنامه هشدار می‌هد که شما خطا دارید. در اینجا FileReader یک استثنا است و امکان دارد عمل کند. پس آن را در try قرار می‌دهد و با دستور try-catch این استثنا را کنترل می‌کند. در واقع به آن‌ها استثناهای چک شده می‌گویند. قبل از کامپایل و اجرای برنامه استثنا را کنترل می‌کند.


}


RuntimeException استثناهایی هستند که در زمان اجرا به وجود می‌آیند. برای کنترل استثناها می‌توانیم از دستور try-catch استفاده کنیم. که دارای سه بلاک try، catch و finally است.
بلاک try: کدهایی که احتمال می‌دهیم در زمان اجرا خطایی رخ می‌دهد را در این قسمت قرار می‌دهیم. اگر نتواند دستورات را اجرا کند و خطا داشته باشند، قسمت بلاک catch اجرا می‌شود.
بلاک :catch در این بلاک دستوراتی را می‌نویسیم که در صورت خطا می‌خواهیم اجرا شوند. می تواند یک شی از کلاس Exceptio  را به عنوان ورودی دریافت کند. این شی دارای اطلاعاتی در مورد خطا است، که شامل علت، نوع و زمان خطا می‌باشد و در اثر رخ دادن خطا محتوای خطا را نگهداری می‌کند. اگر نام شی را تنها بنویسیم به طور کامل خطا را نمایش می‌دهد و اگر از شی و متد getMessage() استفاده کنیم تنها نام خطا را نمایش می‌دهد.
بلاک finally: بلاکی است که در هر دو صورت اجرا می‌شود. یعنی اگر دستورات قسمت try اجرا شود، بعد  دستورات finally اجرا می‌شود و اگر دستورات قسمت catch اجرا شود بعد از آن دستورات finally اجرا می‌شود. دستوراتی که می‌خواهیم در هر دو صورت اجرا شوند، چه try اجرا شود یا catch، را در این قسمت می‌نویسیم. مخصوصا موقعی که با داده‌های داخل هارد دیسک یا حافظه جانبی کار می‎‌کنیم . مثل کار کردن با دیتابیس‌ها و فایل‌ها، عمل بسته شدن این ارتباط را در این قسمت می‌نویسیم. 

 

package  package1
import java.io.File
import java.io.FileReader
public class MainClass {
      public static void main (string [] args) {
          
          try{
                int num1=24;
                int num2=0;
                int result=num1/num2;
                System.out.println(result);
          }
          catch (Exception e ){
                    System.out.println(“Error  :” + e.getMessage());
               
          }
          Finally{
                    System.out.println(“The End…”);
          }
         
    }
}


اگر بخواهیم به صورت خاص روی هر کدام از استثناها کار کنیم به جای اینکه از کلاس Exception استفاده کنیم، می توانیم از آن کلاس خاص خودش استفاده کنیم، 4 کلاس را در این مورد توضیح می‌دهیم.
کلاس ArithmeticExeption: اگر یک عمل ریاضی انجام می‌دهید و احتمال می‌دهید که ممکن است خطا رخ دهد. می‌توانید از این روش استفاده کنید: در قسمت catch به جای کلاس Exception از این کلاس که مربوط به محاسبات ریاضی است، استفاده کنید.


 package  package1
import java.io.File
import java.io.FileReader
public class MainClass {
      public static void main (string [] args) {
          
          try{
                int num1=24;
                int num2=0;
                int result=num1/num2;
                System.out.println(result);
          }
          catch (ArithmeticeException e ){
                    System.out.println(“Error  :” + e.getMessage());
               
          }
          Finally{
                    System.out.println(“The End…”);
          }
         
    }
}


کلاس NullPointerException: اگر اشاره گرهای null را در سیستم به وجود بیاورید، از این کلاس استفاده می‌شود. در این مثال یک رشته null یا هیچی داریم که می‌خواهیم طول این رشته را بدست آوریم. در اینجا یک خطا null رخ می‌دهد که از این کلاس در قسمت catch استفاده می‌کنیم.

package  package1
import java.io.File
import java.io.FileReader
public class MainClass {
      public static void main (string [] args) {
          
          try{
                String str = null;
                 System.out.println(str.lenght());
          }
          catch (NullPointerException e ){
                    System.out.println(“Error  :” + e.getMessage());
               
          }
          Finally{
                    System.out.println(“The End…”);
          }
         
    }
}


کلاس NumberFormatException: زمانی که عمل فرمت بندی روی اعداد انجام می‌دهید و این قابلیت وجود ندارد. در این مثال یک رشته را می‌خواهیم به عدد تبدیل کنیم اما چون در مقدار متغیر str یک کاراکتر وجود دارد، امکان تبدیل کردن آن به عدد وجود ندارد به همین جهت یک خطا رخ می‌دهد.
 

 package  package1
import java.io.File
import java.io.FileReader
public class MainClass {
      public static void main (string [] args) {
          
          try{
                String str = 12a3;
                 int num = Integer.parsInt(str);
                 System.out.println(str);
          }
          catch (NumberFormatException e ){
                    System.out.println(“Error  :” + e.getMessage());
               
          }
          Finally{
                    System.out.println(“The End…”);
          }
         
    }
}

 

کلاس ArrayIndexOutOfBoundsException: این خطا مربوط به آرایه‌ها می‌باشد. در این مثال یک آرایه 4 خانه‌ایی داریم، اما می‌خواهیم خانه 10  آرایه را مقداردهی کنیم که خارج از محدوده آرایه می‌باشد. در ایجا خطا خارج از محدوده آرایه رخ می‎‌دهد.

package  package1
import java.io.File
import java.io.FileReader
public class MainClass {
      public static void main (string [] args) {
          
          try{
                int [] a = new int[4];
                a[10] = 90;
          }
          catch (ArrayIndexOutOfBoundsException e ){
                    System.out.println(“Error  :” + e.getMessage());
               
          }
          Finally{
                    System.out.println(“The End…”);
          }
         
    }
}

 

نکته: برای استثناها می‌توانیم به صورت multi catch عمل استثنا را کنترل کنیم. اگر یک سری دستورات داشته باشیم که ترکیبی از استثناهای مختلف باشد. می توانیم برای هر دستور try چندین catch بنویسیم. مشروط به اینکه کلاس‌‌هایی که داخل catch تعریف می‌کنیم از انواع مختلف باشند. با این کار اگر کدی را در محدوده  try بنویسیم که هر کدام از خطاهایی که در catch نوشته ایم رخ دهد، catchها را به ترتیب کنترل می‌کند و کلاسی که مربوط به خطا است را انتخاب  و اجرا می‌کند.

 

 

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


با امید موفقیت و شادی برای شما دوست درسمنی عزیزsmiley

انجمن برنامه نویسان جاوا

 

 


نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد .
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

مشخصات دوره


مدرس دوره : مهدی عباسی
تعداد جلسات 26 جلسه
مدت زمان 685 دقیقه
حجم دوره 1/84 گیگابایت
سطح مهارت مقدماتی
وضعیت دوره پایان یافته
: میانگین امتیاز

رایگان
برای دسترسی به این دوره وارد یا عضو شوید.
مهدی عباسی
مهدی عباسی

درباره مدرس :

مدیر‌ عامل‌ شرکت آریا‌ نرم‌‌ افزار دارنده مدرک کارشناسی‌ ارشد مهندسی کامپیوتر 12‌ سال سابقه تدریس دروس کامپیوتر را در دانشگاههای دولتی، آزاد، پیام‌نور ملایر، شهیدشمسی‌پور تهران و تدریس برنامه‌نویسی در ... ر انیستیتو ایزایران، مجتمع فنی و موسسه راه‌آینده تهران دارا میباشد و تا به حال راهنمایی انجمنهای علمی دانشگاه و صدها پروژه دانشجویی را برعهده داشته است. تخصص اصلی: با داشتن گواهی‌نامه‌های معتبر تدریس از انیستیتو‌ ایزایران، راه آینده‌تهران و سازمان‌فنی‌حرفه‌ای، تدریس و آموزش‌ دروس کامپیوتر، ‌برنامه‌نویسی کامپیوتر و کلاسهای کنکور کارشناسی و کارشناسی‌ارشد میباشد.همچنین تجربه داوری و نظارت مسابقات برنامه‌نویسی کشوری‌ACM را در سالهای متعدد داشته و تیم مورد رهبری ایشان در 3سال متوالی مقام اول مسابقات کشوری را از آن خود کرده است.ایشان مقالاتی در زمینه شبکه‌های کامپیوتری، تکنیک‌های وزارت دفاع و ... به ثبت رسانده و مشاور و کارشناس در طراحی و برنامه نویسی بیش از 50‌برنامه کاربردی تحت وب و ویندوز و موبایل میباشد. افتخارات دیگر:کسب مقام دوم ایده‌های برتر در مسابقات استارت‌آپ و بکند کشوری را نام برد.بیشتر بدانید