JavaRush /جاوا بلاگ /Random-SD /استثنا ۽ انهن جي سنڀال
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