John Squirrels
مرحله
San Francisco

Java Try - Catch

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

جاوا را امتحان کنید و مسدود کنید

هنگامی که خطایی رخ می دهد، جاوا معمولا متوقف می شود و یک پیام خطا ایجاد می کند. این فرآیند "جاوا یک استثنا پرتاب می کند" نامیده می شود. جاوا امکانات ویژه ای را برای رسیدگی به استثناها فراهم می کند. یکی از آنها تلاش ... گرفتن ... در نهایت ساخت و ساز است. در اینجا نحو دستور block، catch block و در نهایت بلاک است.
//try block
try {
  // Block of code to try
}
//try catch
catch(Exception e) {
  // Block of code to handle errors
}
finally {
 // Optional block of code
          }
هنگامی که یک استثنا در بلوک try رخ می دهد، کنترل به بلوک catch منتقل می شود، که می تواند استثنا را مدیریت کند. اگر چنین بلوکی یافت نشد، یک پیام استثنای کنترل نشده به کاربر نمایش داده می شود و اجرای بیشتر برنامه متوقف می شود. برای جلوگیری از چنین توقف اضطراری است که باید از بلوک try..catch استفاده کنید. Java Try - Catch - 1

به طور خلاصه در مورد تلاش، گرفتن، در نهایت، کلمات کلیدی را پرتاب می کند

مدیریت استثنا در جاوا بر اساس استفاده از کلمات کلیدی زیر در یک برنامه است:
  • try - یک بلوک از کد را تعریف می کند که در آن یک استثنا می تواند رخ دهد.
  • catch - بلوک کدی را که در آن استثنا مورد استفاده قرار می گیرد، تعریف می کند.
  • در نهایت — یک بلوک از کد را تعریف می کند که اختیاری است، اما در صورت وجود، بدون توجه به نتایج بلوک try، به هر حال اجرا می شود.
از این کلمات کلیدی برای ایجاد ساختارهای پردازشی ویژه در کد برنامه استفاده می شود: try catch و try catch last}.
  • انداختن - برای مطرح کردن یک استثنا استفاده می شود.
  • پرتاب - در امضای متدها برای هشدار دادن به اینکه یک روش ممکن است استثنا ایجاد کند استفاده می شود.

نمونه آسان ساخت و ساز سعی کنید

فرض کنید یک برنامه با مقداری آرایه داریم.
public class TryTest {
   public static void main(String[] args) {
       int[] myArray = new int[5];
       myArray[7] = 8;
       System.out.println(myArray[7]);
   }
}
از آنجایی که ما سعی می کنیم به یک عنصر آرایه با شاخص غیر موجود دسترسی پیدا کنیم، برنامه با یک خطا خارج می شود:
استثنا در رشته "اصلی" java.lang.ArrayIndexOutOfBoundsException: فهرست 7 خارج از محدوده برای طول 5 در روز.TryTest.main(TryTest.java:6) فرآیند با کد خروج 1 به پایان رسید
بیایید این برنامه را اصلاح کنیم و این استثنا را با یک try-catch مدیریت کنیم. ابتدا بلوک را امتحان کنید، بعداً مسدود کردن را بگیرید.
//try catch example
public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (Exception myEx) {
           System.out.println("The exception was handled...");
       }

       System.out.println("This is the end of the program...");
   }
}
حالا خروجی تغییر کرده است:
استثنا رسیدگی شد... این پایان برنامه است... فرآیند با کد خروج به پایان رسید 0 فرآیند با کد خروج 0 به پایان رسید
در این صورت، برنامه به درستی تکمیل شده است، پیام ما روی صفحه نمایش داده می شود. خاتمه صحیح برنامه با کد 0 در پایان فرآیند نشان داده می شود، در حالی که اشتباه است - 1. هنگام استفاده از بلوک try...catch، ابتدا تمام دستورات بین دستورات try و catch اجرا می شوند. اگر یک استثنا در بلوک try رخ دهد، دستور اجرای عادی متوقف می شود و به دستور catch ادامه می یابد. بنابراین، زمانی که اجرای برنامه به اعداد[7]=8 رسید; خط، برنامه متوقف می شود و به بلوک catch می رود در مورد ما، متغیر myEx را با نوع Exception اعلام کرده ایم. این کلاس پایه برای همه استثناها است و بنابراین آنها می توانند متفاوت باشند. به عنوان مثال، استثناهایی وجود دارند که مسئول سرریزهای پشته، فراتر از نمایه سازی آرایه هستند، مانند مورد ما، اشاره به Null، و غیره. اگر نوع استثنا را حدس نمی زدیم، برنامه نیز به اشتباه خاتمه می یافت. با این حال، ما نوع Exception را برای سادگی مثال انتخاب کردیم و کلاس پایه برای همه استثناها است. بنابراین دستور catch (Exception myEx) تقریباً همه استثناها را کنترل می کند. مدیریت استثنا در این مورد پس از تکمیل بلوک catch، برنامه به کار خود ادامه می دهد و تمام دستورالعمل های دیگر را بعد از بلوک catch اجرا می کند. اگر می‌خواهید استثناهای رخ داده را ببینید، می‌توانید از برنامه بخواهید یک پشته از فراخوانی‌های متد را چاپ کند. این همان کاری است که JVM در هنگام رخ دادن یک استثناء غیرقابل کشف انجام می دهد: اجرای برنامه را متوقف می کند و پس از اجرای کد بلوک نهایی، در صورت وجود، یک stack trace را چاپ می کند.
public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (Exception myEx) {

         myEx.printStackTrace();
       }

       System.out.println("This is the end of the program...");
   }
}
رسیدگی به استثنا در این مورد به چاپ پشته ردیابی خطا در کنسول با استفاده از متد printStackTrace () تعریف شده در کلاس Exception منجر می شود .
java.lang.ArrayIndexOutOfBoundsException: نمایه 7 خارج از محدوده برای طول 5 در روز.TryTest.main(TryTest.java:7) این پایان برنامه است... فرآیند با کد خروج 0 به پایان رسید
با این حال، برنامه به درستی خارج شد.

سرانجام! بعد از گرفتن

در مثال و در تعاریف کلمات کلیدی برای رسیدگی به استثنا، بلوک نهایی را ذکر کردیم. اختیاری است، اما در صورت وجود، بدون توجه به نتایج بلوک try اجرا خواهد شد. بیایید نوع استثنا را به NullPointerException تغییر دهیم.
public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (NullPointerException myEx) {
           System.out.println("The exception was handled...");

       }

       finally{
           System.out.println(" finally");
       }

       System.out.println("This is the end of the program...");
   }
}
در اینجا خروجی است:
استثنا در رشته "اصلی" java.lang.ArrayIndexOutOfBoundsException: نمایه 7 خارج از محدوده برای طول 5 در روز.TryTest.main(TryTest.java:7) در نهایت فرآیند با کد خروج 1 به پایان رسید
ضمناً می‌توانیم نوع استثنا را درست تعیین کنیم. در اینجا IndexOutOfBoundsException است.
public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (IndexOutOfBoundsException myEx) {
           System.out.println("The exception was handled...");

       }

       finally{
           System.out.println(" finally");
       }

       System.out.println("This is the end of the program...");
   }
}
در این حالت خروجی به صورت زیر خواهد بود:
استثنا رسیدگی شد... بالاخره این پایان برنامه است... فرآیند با کد خروج 0 به پایان رسید

روش کار استثناها چیست؟

نکته این است که همه این کلمات - catch, drop, throw فقط با java.lang.Throwable یا فرزندان آن قابل استفاده هستند. برای مثال می توانید این کار را انجام دهید:
public class MyClass {
    public static void main(String[] args) {
        try {
        } catch (Throwable thr) {
}
    }
}
با این حال، شما نمی توانید این کار را به این صورت انجام دهید:
public class MyClass {
public static void main(String[] args) {
        try {
        } catch (String thr) {
}
    }
}
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION