JavaRush /جاوا بلاگ /Random-UR /مستثنیات اور ان کا انتظام
articles
سطح

مستثنیات اور ان کا انتظام

گروپ میں شائع ہوا۔
استثناء یا غیر معمولی حالات (ریاستیں) وہ غلطیاں ہیں جو کسی پروگرام میں اس کے آپریشن کے دوران ہوتی ہیں۔ جاوا میں تمام مستثنیات آبجیکٹ ہیں۔ لہذا، وہ نہ صرف خود بخود پیدا ہوسکتے ہیں جب کوئی غیر معمولی صورتحال واقع ہوتی ہے، بلکہ خود ڈویلپر کے ذریعہ بھی تخلیق کیا جاسکتا ہے۔ استثنیٰ کی کلاسوں کا درجہ بندی: مستثنیات اور ان سے نمٹنے - 1مستثنیات کو کئی طبقات میں تقسیم کیا گیا ہے، لیکن ان سب کا ایک مشترکہ آباؤ اجداد ہے - کلاس Throwable۔ اس کی اولاد ذیلی طبقات Exceptionاور ہیں Error۔ مستثنیات ( Exceptions) کسی پروگرام میں مسائل کا نتیجہ ہیں جو اصولی طور پر قابل حل اور پیشین گوئی ہیں۔ مثال کے طور پر، صفر سے تقسیم عدد میں واقع ہوئی۔ غلطیاں ( Errors) زیادہ سنگین مسائل ہیں جو جاوا کی تفصیلات بتاتی ہیں کہ آپ کو اپنے پروگرام میں ہینڈل کرنے کی کوشش نہیں کرنی چاہیے کیونکہ وہ JVM سطح کے مسائل ہیں۔ مثال کے طور پر، اس قسم کی مستثنیات اس صورت میں ہوتی ہیں جب ورچوئل مشین کو دستیاب میموری ختم ہو جائے۔ پروگرام اب بھی JVM کے لیے اضافی میموری فراہم نہیں کر سکے گا۔ جاوا میں، تمام مستثنیات کو تین اقسام میں تقسیم کیا گیا ہے: چیک شدہ مستثنیات ( checked) اور غیر نشان زد مستثنیات ( unchecked) جس میں غلطیاں ( Errors) اور رن ٹائم مستثنیات ( RuntimeExceptionsclass descendant Exception) شامل ہیں۔ کنٹرول شدہ مستثنیات ایسی خرابیاں ہیں جو کسی پروگرام میں ہینڈل کی جا سکتی ہیں اور ہونی چاہئیں؛ ایک کلاس کی تمام اولادیں Exception(لیکن نہیں RuntimeException) اس قسم سے تعلق رکھتی ہیں۔ استثنیٰ ہینڈلنگ آپریٹرز کا استعمال کرتے ہوئے کی جا سکتی ہے try…catchیا پروگرام کے بیرونی حصے میں منتقل کی جا سکتی ہے۔ مثال کے طور پر، کوئی طریقہ استثنیٰ کو پاس کر سکتا ہے جو اس میں کال کے درجہ بندی میں خود کو سنبھالے بغیر پائے جاتے ہیں۔ غیر نشان زد مستثنیات کو ہینڈلنگ کی ضرورت نہیں ہے، لیکن اگر آپ چاہیں تو آپ کلاس استثناء کو سنبھال سکتے ہیں RuntimeException۔ آئیے درج ذیل پروگرام کو مرتب کریں اور چلائیں:
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
لانچ ہونے پر، مندرجہ ذیل پیغام کنسول پر دکھایا جائے گا:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
پیغام اس استثناء کی کلاس کو ظاہر کرتا ہے جو پیش آیا - ArithmeticException۔ اس استثنا کو سنبھالا جا سکتا ہے:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
اب، معیاری ایرر میسج کے بجائے، ایک بلاک کو عمل میں لایا جائے گا catch، جس کا پیرامیٹر کلاس کا آبجیکٹ ای ہے جو استثناء سے مطابقت رکھتا ہے (آجیکٹ کو خود کوئی بھی نام دیا جاسکتا ہے، اگر ہم زبردستی پھینکنا چاہتے ہیں تو اس کی ضرورت ہوگی۔ اس استثنا کو دوبارہ، مثال کے طور پر، تاکہ اسے کسی دوسرے ہینڈلر کی جانچ پڑتال کی جائے)۔ اس صورت میں، بلاک tryمیں پروگرام کا ٹکڑا ہوتا ہے جہاں ایک استثناء ممکنہ طور پر ہوسکتا ہے۔ ایک tryمختلف استثنائی کلاسوں کے ساتھ کئی کیچ بلاکس سے مطابقت رکھتا ہے۔
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
     int[] m = {-1,0,1};
        Scanner sc = new Scanner(System.in);
        try {
            int a = sc.nextInt();
            m[a] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        }
    }
}
اگر، پیش کردہ پروگرام شروع کرنے کے بعد، صارف کی بورڈ 1 یا 2 سے داخل ہوتا ہے، تو پروگرام بغیر کسی استثناء کے چلے گا۔ اگر صارف 0 میں داخل ہوتا ہے تو، کلاس کی ایک استثناء واقع ہوگی ArithmeticExceptionاور اسے پہلے بلاک کے ذریعے ہینڈل کیا جائے گا catch۔ اگر صارف 3 میں داخل ہوتا ہے تو، ایک کلاس استثناء واقع ہوگا ArrayIndexOutOfBoundsException(سرنی حد سے باہر)، اور اس پر دوسرے بلاک کے ذریعہ کارروائی کی جائے گی catch۔ اگر صارف ایک غیر عددی نمبر داخل کرتا ہے، مثال کے طور پر، 3.14، تو ایک کلاس استثناء واقع ہو گا InputMismatchException(ان پٹ کی قسم کا مماثل نہیں)، اور اسے معیاری غلطی کی شکل میں پھینک دیا جائے گا، کیونکہ ہم نے اسے کسی بھی طرح سے ہینڈل نہیں کیا۔ تاہم، آپ کلاس کے لیے ایک ہینڈلر شامل کر سکتے ہیں Exception، چونکہ یہ کلاس دیگر تمام چیک شدہ مستثنیات کے لیے پیرنٹ کلاس ہے، یہ ان میں سے کسی کو بھی پکڑ لے گی (بشمول InputMismatchException
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int[] m = {-1,0,1};
        int a = 1;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            m[a-1] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        } catch (Exception e) {
            System.out.println("Произошло ещё Howое-то исключение");
        }
    }
}
چونکہ مستثنیات کلاسوں اور ذیلی طبقات کے درجہ بندی پر بنائے گئے ہیں، آپ کو پہلے زیادہ مخصوص استثناء کو ہینڈل کرنے کی کوشش کرنی چاہیے اور اس کے بعد ہی زیادہ عام۔ یعنی، اگر ہم بلاک کو کلاس استثنیٰ ہینڈلنگ کے ساتھ پہلے رکھتے ہیں (اور تیسرے نہیں) Exception، تو ہمیں "کچھ دوسری استثناء واقع ہوئی ہے" کے علاوہ کوئی غلطی کے پیغامات کبھی نظر نہیں آئیں گے (تمام مستثنیات اس بلاک کے ذریعے فوری طور پر پکڑے جائیں گے اور اس بلاک تک نہیں پہنچیں گے۔ دیگر)۔ بلاکس میں اختیاری اضافہ try…catchبلاک ہو سکتا ہے finally۔ اس میں دیے گئے احکامات کو ہر حال میں بجا لایا جائے گا، قطع نظر اس سے کہ کوئی استثناء واقع ہو یا نہ ہو۔ اس حقیقت کے باوجود کہ جب کوئی غیر ہینڈل استثناء واقع ہوتا ہے، اس استثناء کی نسل کے بعد باقی پروگرام کا حصہ عمل میں نہیں آتا ہے۔ مثال کے طور پر، اگر کچھ لمبے حساب کے دوران کوئی استثناء واقع ہوا، تو finallyآپ درمیانی نتائج کو بلاک میں دکھا یا محفوظ کر سکتے ہیں۔ ماخذ سے لنک: مستثنیات اور ان کا انتظام
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION