JavaRush /جاوا بلاگ /Random-SD /استثنا: چيڪ ٿيل، اڻ چيڪ ٿيل ۽ توهان جو پنهنجو

استثنا: چيڪ ٿيل، اڻ چيڪ ٿيل ۽ توهان جو پنهنجو

گروپ ۾ شايع ٿيل
سلام! پوئين ليڪچر ۾، اسان جاوا ٻوليءَ جي هڪ اهڙي پهلوءَ کان واقف ٿياسين جيئن استثنا ۽ انهن سان ڪم ڪرڻ جا مثال ڏٺا. اڄ اسان انهن جي جوڙجڪ تي هڪ تمام گهڻي نظر وجهنداسين، ۽ اهو پڻ سکنداسين ته اسان جا پنهنجا استثنا ڪيئن لکجن :)

استثناءَ جا قسم

جيئن اسان چيو، جاوا ۾ ڪيترائي استثنا ڪلاس آهن، لڳ ڀڳ 400! پر اهي سڀئي گروپن ۾ ورهايل آهن، تنهنڪري انهن کي ياد ڪرڻ بلڪل آسان آهي. ھتي اھو آھي جيڪو اھو ڏسڻ ۾ اچي ٿو: استثنا: چيڪ ٿيل، اڻ چيڪ ٿيل ۽ توهان جو پنهنجو - 2سڀ استثنا آھن ھڪڙو عام ابن ڏاڏن وارو طبقو Throwable. ان مان ٻه وڏا گروهه اچن ٿا - استثنا (استثنيٰ) ۽ غلطيون (Error). غلطي جاوا ورچوئل مشين جي آپريشن سان لاڳاپيل پروگرام جي عمل جي دوران هڪ نازڪ غلطي آهي. اڪثر ڪيسن ۾، غلطي کي سنڀالڻ جي ضرورت ناهي، ڇاڪاڻ ته اهو ڪوڊ ۾ ڪجهه سنگين خاميون ظاهر ڪري ٿو. سڀ کان وڌيڪ مشهور غلطيون: StackOverflowError- واقع ٿينديون آهن، مثال طور، جڏهن هڪ طريقو پاڻ کي لامحدود طور تي سڏيندو آهي، ۽ OutOfMemoryError- تڏهن ٿئي ٿو جڏهن نيون شيون ٺاهڻ لاء ڪافي ياداشت نه آهي. جئين توهان ڏسي سگهو ٿا، انهن حالتن ۾، اڪثر ڪري پروسيس ڪرڻ لاء ڪجهه خاص ناهي - ڪوڊ صرف غلط لکيو ويو آهي ۽ ٻيهر ڪرڻ جي ضرورت آهي. استثنا آهن، حقيقت ۾، استثنا: هڪ غير معمولي، غير منصوبابندي واري صورتحال جيڪا واقع ٿي جڏهن پروگرام هلندي هئي. اهي غلطيون ايتريون سنگين نه آهن جيترو غلطي، پر اهي اسان جي ڌيان جي ضرورت آهي. سڀئي استثنا 2 قسمن ۾ ورهايل آهن - چيڪ ٿيل ( چڪ ٿيل ) ۽ اڻ چيڪ ٿيل ( اڻ چيڪ ٿيل ). استثنا: چيڪ ٿيل، اڻ چيڪ ٿيل ۽ توهان جو پنهنجو - 3سڀ چڪاس ٿيل استثنا کان ايندا Exception. ڇا مطلب آهي "تصديق لائق"؟ اسان جزوي طور تي گذريل ليڪچر ۾ ان جو ذڪر ڪيو آهي : "...جاوا ڪمپلر کي تمام عام استثنان بابت ڄاڻ آهي، ۽ ڄاڻي ٿو ته اهي ڪهڙين حالتن ۾ ٿي سگهن ٿيون." مثال طور، هو ڄاڻي ٿو ته جيڪڏهن ڪو پروگرامر ڪوڊ ۾ فائل مان ڊيٽا پڙهي، صورتحال آساني سان پيدا ٿي سگهي ٿي ته فائل موجود ناهي. ۽ ڪيتريون ئي اهڙيون حالتون آهن جن جو هو اڳ ۾ ئي اڳڪٿي ڪري سگهي ٿو. تنهن ڪري، مرتب ڪندڙ اسان جي ڪوڊ کي اڳ ۾ ئي امڪاني استثنا لاء چيڪ ڪري ٿو. جيڪڏهن اهو انهن کي ڳولي ٿو، اهو ڪوڊ گڏ نه ڪندو جيستائين اسان انهن کي پروسيس نه ڪنداسين يا انهن کي مٿين ڏانهن اڳتي وڌايو. ٻيو قسم جو استثنا "اڻ چيڪ ٿيل" آهي. اهي ڪلاس مان ايندا آهن RuntimeException. اهي ڪيئن مختلف آهن انهن کان جيڪي آزمائشي رهيا آهن؟ اهو لڳي ٿو ته اتي پڻ مختلف طبقن جو هڪ گروپ آهي جيڪي اچن ٿا RuntimeException۽ مخصوص رن ٽائم استثنا بيان ڪن ٿا. فرق اهو آهي ته مرتب ڪندڙ انهن غلطين جي اميد نٿو رکي. هو چوڻ لڳي ٿو: ”ڪوڊ لکڻ وقت، مون کي ڪجهه به مشڪوڪ نه مليو، پر ڪم ڪندي ڪجهه غلط ٿي ويو. ظاهر آهي ته ڪوڊ ۾ غلطيون آهن!" ۽ حقيقت ۾ اهو آهي. اڻ چيڪ ٿيل استثنا اڪثر ڪري پروگرامر جي غلطين جو نتيجو آهن. ۽ مرتب ڪندڙ واضح طور تي سڀني ممڪن غلط حالتن کي مهيا ڪرڻ جي قابل نه آهي جيڪي ماڻهو پنهنجي هٿن سان ٺاهي سگهن ٿا :) تنهن ڪري، اهو اسان جي ڪوڊ ۾ اهڙي استثناء جي سنڀال نه ڪندو. توهان اڳ ۾ ئي ڪيترن ئي غير چيڪ ٿيل استثنان کي منهن ڏنو آهي:
  • ArithmeticExceptionاهو ٿئي ٿو جڏهن صفر سان ورهايو وڃي
  • ArrayIndexOutOfBoundsExceptionائين ٿئي ٿو جڏهن صف کان ٻاهر سيل تائين رسائي جي ڪوشش ڪري ٿي.
نظرياتي طور تي، يقينا، جاوا جي تخليقن کي لازمي طور تي اهڙي استثناء کي لازمي طور تي متعارف ڪرايو وڃي ها، پر پوء ڪوڊ ڇا ٿيندو؟ انگن کي ورهائڻ جي ڪنهن به عمل سان، توهان کي هڪ ڪوشش-ڪيچ لکڻو پوندو ته ڇا توهان اتفاقي طور تي صفر سان ورهائي رهيا آهيو؟ جڏهن به ڪنهن صف تائين پهچندي، توهان کي لکڻ جي ڪوشش ڪرڻي پوندي ته ڇا توهان انهن حدن کان ٻاهر ويا آهيو. لکيل ڪو به ڪوڊ اسپگيٽي هوندو ۽ مڪمل طور تي اڻ پڙهيل هوندو. اهو منطقي آهي ته هن خيال کي ڇڏي ڏنو ويو. تنهن ڪري، اڻ چيڪ ٿيل استثنان کي ڪوشش ڪرڻ واري بلاڪ ۾ هٿ ڪرڻ يا مٿي تي اڇلائڻ جي ضرورت ناهي، جيتوڻيڪ اهو ٽيڪنالاجي طور ممڪن آهي، جيئن غلطي سان.

توهان جي استثنا کي ڪيئن اڇلائي

يقينن، جاوا جا ٺاهيندڙ سڀني غير معمولي حالتن لاء مهيا ڪرڻ جي قابل نه آهن جيڪي پروگرامن ۾ پيدا ٿي سگهن ٿيون. دنيا ۾ تمام گھڻا پروگرام آھن، ۽ اھي ڏاڍا مختلف آھن. پر اھو ٺيڪ آھي، ڇو ته جيڪڏھن ضروري ھجي ته توھان پنھنجو استثنا ٺاھي سگھوٿا. اهو تمام آساني سان ڪيو ويندو آهي. توهان کي صرف پنهنجو ڪلاس ٺاهڻو آهي. ان جو نالو ختم ٿيڻ گهرجي "استثنا" سان. مرتب ڪندڙ کي ان جي ضرورت ناهي، پر توهان جو ڪوڊ پڙهڻ وارا پروگرامر فوري طور تي سمجهي ويندا ته هي هڪ استثنائي ڪلاس آهي. اضافي طور تي، توهان کي ظاهر ڪرڻ جي ضرورت آهي ته ڪلاس ڪلاس مان اچي ٿو Exception. اهو ڪمپلر ۽ صحيح آپريشن لاء اڳ ۾ ئي ضروري آهي. مثال طور، اسان وٽ هڪ ڪلاس Dog - Dog. اسان ڪتي کي استعمال ڪري سگھون ٿا walk(). پر ان کان اڳ، اسان کي چيڪ ڪرڻ جي ضرورت آهي ته ڇا اسان جي پالتو جانور هڪ کالر، ليش ۽ موز پائڻ آهي. جيڪڏهن انهن مان ڪو به غائب آهي، اسان پنهنجو استثنا اڇلائي ڇڏينداسين DogIsNotReadyException. ان جو ڪوڊ هن طرح نظر ايندو:
public class DogIsNotReadyException extends Exception {

   public DogIsNotReadyException(String message) {
       super(message);
   }
}
اهو ظاهر ڪرڻ لاءِ ته هڪ ڪلاس هڪ استثنا آهي، توهان کي لکڻ جي ضرورت آهي Exceptions Exception ڪلاس جي نالي کان پوءِ: هن جو مطلب آهي ته ”ڪلاس ڪلاس استثنا مان نڪتل آهي. Constructor ۾، اسان صرف Exceptionهڪ لائن سان ڪلاس ڪنسٽرڪٽر کي سڏينداسين message- اهو صارف کي سسٽم مان هڪ پيغام ڏيکاريندو جيڪو غلطي کي بيان ڪري ٿو. اھو اھو آھي جيڪو اسان جي ڪلاس ڪوڊ ۾ نظر ايندو:
public class Dog {

   String name;
   boolean isCollarPutOn;
   boolean isLeashPutOn;
   boolean isMuzzlePutOn;

   public Dog(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

   }

   public void putCollar() {

       System.out.println("The collar is on!");
       this.isCollarPutOn = true;
   }

   public void putLeash() {

       System.out.println("The leash is on!");
       this.isLeashPutOn = true;
   }

   public void putMuzzle() {
       System.out.println("The muzzle is on!");
       this.isMuzzlePutOn = true;
   }

   public void walk() throws DogIsNotReadyException {

   System.out.println("Let's go for a walk!");
   if (isCollarPutOn && isLeashPutOn && isMuzzlePutOn) {
       System.out.println("Hurrah, let's go for a walk!" + name + " I am glad!");
   } else {
       throw new DogIsNotReadyException("Dog " + name + "not ready for a walk! Check your gear!");
   }
 }

}
هاڻي اسان جو طريقو walk()هڪ استثنا اڇلائي ٿو DogIsNotReadyException. اهو لفظ استعمال ڪندي ڪيو ويندو آهي throw. جيئن اسان اڳ ۾ چيو آهي، هڪ استثنا هڪ ​​اعتراض آهي. تنهن ڪري، اسان جي طريقي ۾، جڏهن هڪ غير معمولي صورتحال پيدا ٿئي ٿي - ڪتي تي ڪجهه غائب آهي - اسان هڪ نئين طبقي اعتراض ٺاهي DogIsNotReadyException۽ ان کي پروگرام ۾ اڇلائي لفظ استعمال ڪندي throw. اسان طريقن جي دستخط ۾ walk()اڇلائي شامل ڪندا آهيون DogIsNotReadyException. ٻين لفظن ۾، مرتب ڪندڙ کي هاڻي خبر آهي ته هڪ طريقو ڪال walk()هڪ استثنا جي نتيجي ۾ ٿي سگهي ٿو. تنهن ڪري جڏهن اسان هن کي پروگرام ۾ ڪٿي سڏيندا آهيون، استثنا کي هٿي وٺڻ جي ضرورت پوندي. اچو ته هن طريقي سان ڪرڻ جي ڪوشش ڪريو main():
public static void main(String[] args) {

   Dog dog = new Dog("Mukhtar");
   dog.putCollar();
   dog.putMuzzle();
   dog.walk();//Unhandled exception: DogIsNotReadyException
}
مرتب نٿو ڪري، استثنا هٿ نه ڪيو ويو آهي! try-catchاچو ته استثنا کي سنڀالڻ لاءِ اسان جي ڪوڊ کي بلاڪ ۾ لپي ڇڏيون :
public static void main(String[] args) {

   Dog dog = new Dog("Mukhtar");
   dog.putCollar();
   dog.putMuzzle();
   try {
       dog.walk();
   } catch (DogIsNotReadyException e) {
       System.out.println(e.getMessage());
       System.out.println("Checking equipment! Is the collar on?" + dog.isCollarPutOn + "\r\n Is the leash on?"
       + dog.isLeashPutOn + "\r\n Are you wearing a muzzle?" + dog.isMuzzlePutOn);
   }
}
هاڻي اچو ته ڪنسول جي پيداوار تي نظر رکون:

Ошейник надет! 
Намордник надет! 
Собираемся на прогулку! 
Собака Мухтар не готова к прогулке! Проверьте экипировку! 
Проверяем снаряжение! Ошейник надет? true
Поводок надет? false 
Намордник надет? true
ڏسو ته ڪيترو وڌيڪ معلوماتي ڪنسول آئوٽ بڻجي ويو آهي! اسان هر قدم کي ڏسون ٿا جيڪو پروگرام ۾ ٿيو؛ اسان ڏسون ٿا ته غلطي ڪٿي ٿي آهي ۽ فوري طور تي نوٽيس ڪيو ته ڇا اسان جو ڪتو غائب آهي :) اهو ڪيئن آهي اسان پنهنجون استثنا پيدا ڪندا آهيون. جئين توهان ڏسي سگهو ٿا، ڪجھ به پيچيده ناهي. ۽ جيتوڻيڪ جاوا ڊولپرز غلط طور تي ليس ڪتن لاءِ انهن جي ٻولي ۾ خاص استثنا شامل ڪرڻ جي زحمت نه ڪئي، اسان انهن جي نگراني کي درست ڪيو :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION