CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ استثنا
John Squirrels
سطح
San Francisco

جاوا ۾ استثنا

گروپ ۾ شايع ٿيل
سلام! اڄ جي سبق ۾، اسان جاوا استثناءَ بابت ڳالهائينداسين. روزاني زندگي اهڙين حالتن سان ڀريل آهي جنهن جي اسان کي توقع ناهي. مثال طور، توهان صبح جو ڪم لاءِ اٿندا آهيو ۽ پنهنجي فون جي چارجر کي ڳوليندا آهيو، پر توهان اهو ڪٿي به نه ڳوليندا آهيو. توهان غسل خاني ۾ وڃو صرف شاور ڪرڻ لاءِ اهو معلوم ڪرڻ لاءِ ته پائپ منجمد آهن. توهان پنهنجي ڪار ۾ وڃو، پر اهو شروع نه ٿيندو. انسان اهڙين غير متوقع حالتن کي آسانيءَ سان منهن ڏئي سگهي ٿو. هن آرٽيڪل ۾، اسان اهو معلوم ڪرڻ جي ڪوشش ڪنداسين ته جاوا پروگرام انهن سان ڪيئن ڊيل ڪندا.

جاوا استثنا ڇا آهي؟

پروگرامنگ جي دنيا ۾، پروگرام جي عمل ۾ غلطيون ۽ غير متوقع حالتن کي استثنا سڏيو ويندو آهي. ھڪڙي پروگرام ۾، استثنا ٿي سگھي ٿو غلط استعمال ڪندڙ ڪارناما، ڊسڪ جي ناقص جڳھ، يا سرور سان نيٽ ورڪ ڪنيڪشن جي نقصان جي ڪري. استثنا پڻ پروگرامنگ جي غلطين يا API جي غلط استعمال جي نتيجي ۾ ٿي سگھي ٿو. حقيقي دنيا ۾ انسانن جي برعڪس، هڪ پروگرام کي ضرور ڄاڻڻ گهرجي ته انهن حالتن کي ڪيئن سنڀالجي. ان لاءِ، جاوا وٽ ھڪڙو ميکانيزم آھي جنھن کي Exception handling طور سڃاتو وڃي ٿو.

لفظن جي باري ۾ چند لفظ

جاوا ۾ استثنا سنڀالڻ پروگرام ۾ هيٺين لفظن جي استعمال تي ٻڌل آهي:
  • ڪوشش ڪريو - ڪوڊ جو ھڪڙو بلاڪ بيان ڪري ٿو جتي ھڪڙو استثنا ٿي سگھي ٿو.
  • ڪيچ - ڪوڊ جو هڪ بلاڪ بيان ڪري ٿو جتي استثنا سنڀاليا ويندا آهن؛
  • آخر ۾ - ڪوڊ جي هڪ اختياري بلاڪ کي بيان ڪري ٿو، جيڪو، جيڪڏهن موجود آهي، عمل ڪيو وڃي ٿو بغير ڪوشش جي بلاڪ جي نتيجن جي.
اهي لفظ استعمال ڪيا وڃن ٿا خاص ٺاھڻ لاءِ ڪوڊ ۾: try{}catch , try{}catch{}finally , try{}finally{} .
  • اڇلائڻ - هڪ استثنا بلند ڪرڻ لاء استعمال ڪيو؛
  • اڇلائي - استعمال ٿيل طريقي جي دستخط ۾ ڊيڄاري ٿو ته طريقو هڪ استثنا اڇلائي سگھي ٿو.
جاوا پروگرام ۾ لفظ استعمال ڪرڻ جو هڪ مثال:
// This method reads a string from the keyboard

public String input() throws MyException { // Use throws to warn
// that the method may throw a MyException
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String s = null;
// We use a try block to wrap code that might create an exception. In this case,
// the compiler tells us that the readLine() method in the
// BufferedReader class might throw an I/O exception
    try {
        s = reader.readLine();
// We use a catch block to wrap the code that handles an IOException
    } catch (IOException e) {
        System.out.println(e.getMessage());
// We close the read stream in the finally block
    } finally {
// An exception might occur when we close the stream if, for example, the stream was not open, so we wrap the code in a try block
        try {
            reader.close();
// Handle exceptions when closing the read stream
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    if (s.equals("")) {
// We've decided that an empty string will prevent our program from working properly. For example, we use the result of this method to call the substring(1, 2) method. Accordingly, we have to interrupt the program by using throw to generate our own MyException exception type.
        throw new MyException("The string cannot be empty!");
    }
    return s;
}

اسان کي استثنا جي ضرورت ڇو آهي؟

اچو ته حقيقي دنيا مان هڪ مثال ڏسو. تصور ڪريو ته هاء وي جي هڪ حصي ۾ هڪ ننڍڙي پل آهي جنهن ۾ وزن جي گنجائش محدود آهي. جيڪڏهن پل جي حد کان وڌيڪ وزني ڪار ان جي مٿان ڊوڙي ته اها ڪري سگهي ٿي. ڊرائيور جي حالت ٿي ويندي، ان کي نرمي سان رکڻ لاء، غير معمولي. ان کان بچڻ لاءِ ٽرانسپورٽ ڊپارٽمينٽ روڊن تي ڪا به غلطي ٿيڻ کان اڳ وارننگ نشانيون لڳائيندو آهي. ڊيڄاريندڙ نشاني ڏسي، ڊرائيور پنهنجي گاڏي جي وزن کي پل لاءِ وڌ ۾ وڌ وزن سان ڀيٽي ٿو. جيڪڏهن گاڏي تمام گهڻي آهي، ڊرائيور هڪ بائي پاس رستو وٺي ٿو. ٽرانسپورٽ ڊپارٽمينٽ، پهريون، اهو ممڪن ڪيو ته ٽرڪ ڊرائيورن کي پنهنجو رستو تبديل ڪرڻ جي ضرورت هجي، ٻيو، ڊرائيور کي مکيه روڊ تي خطرن بابت خبردار ڪيو، ۽ ٽيون، ڊرائيورن کي خبردار ڪيو ته پل کي خاص حالتن ۾ استعمال نه ڪيو وڃي. جاوا ۾ استثنا - 2پروگرام ۾ غير معمولي حالتن کي روڪڻ ۽ حل ڪرڻ جي صلاحيت، ان کي جاري رکڻ جي اجازت ڏئي ٿي، جاوا ۾ استثنا استعمال ڪرڻ جو هڪ سبب آهي. استثنا ميڪانيزم پڻ توهان کي اجازت ڏئي ٿو توهان جي ڪوڊ (API) کي ڪنهن به ان پٽ جي تصديق ڪندي (چڪنگ) غلط استعمال کان بچائڻ. هاڻي تصور ڪريو ته توهان هڪ سيڪنڊ لاءِ ٽرانسپورٽ ڊپارٽمينٽ آهيو. پهرين، توهان کي انهن هنڌن کي ڄاڻڻ جي ضرورت آهي جتي موٽرسائيڪل مصيبت جي توقع ڪري سگهي ٿي. ٻيو، توهان کي ڊيڄاريندڙ نشانين ٺاهڻ ۽ انسٽال ڪرڻ جي ضرورت آهي. ۽ آخرڪار، توهان کي رستا مهيا ڪرڻ جي ضرورت آهي جيڪڏهن مکيه رستي تي مسئلا پيدا ٿين. جاوا ۾، استثنا ميڪانيزم ساڳئي طريقي سان ڪم ڪري ٿو. ڊولپمينٽ دوران، اسان ڪوڊ جي خطرناڪ حصن جي چوڌاري "استثنائي رڪاوٽون" ٺاهڻ لاءِ هڪ ڪوشش بلاڪ استعمال ڪندا آهيون، اسان ڪيچ {} بلاڪ استعمال ڪندي "بيڪ اپ رستا" مهيا ڪندا آهيون، ۽ اسان ڪوڊ لکندا آهيون جيڪو هلڻ گهرجي، آخر ۾{} بلاڪ ۾ ڇا به هجي. . جيڪڏهن اسان "بيڪ اپ روٽ" مهيا نٿا ڪري سگهون يا اسان صارف کي چونڊڻ جو حق ڏيڻ چاهيون ٿا، اسان کي گهٽ ۾ گهٽ هن کي خطري کان ڊيڄارڻ گهرجي. ڇو؟ بس هڪ ڊرائيور جي ڪاوڙ جو تصور ڪريو، جيڪو هڪ ڊيڄاريندڙ نشاني ڏسڻ کان سواء، هڪ ننڍڙي پل تي پهچي ٿو جيڪو هو پار نه ڪري سگهي ٿو! پروگرامنگ ۾، جڏهن اسان جا ڪلاس ۽ طريقا لکندا آهيون، اسان هميشه اهو نه ٿا ڏسي سگهون ته اهي ڪيئن استعمال ڪيا ويندا ٻين ڊولپرز طرفان. نتيجي طور، اسان هڪ غير معمولي صورتحال کي حل ڪرڻ لاء 100٪ صحيح طريقي سان پيش نه ٿا ڪري سگھون. اهو چيو ته، اهو سٺو فارم آهي ٻين کي خبردار ڪرڻ لاء غير معمولي حالتن جي امڪان بابت. جاوا جي استثنا واري ميڪانيزم اسان کي اهو ڪرڻ جي اجازت ڏئي ٿي اڇلائي لفظ سان - بنيادي طور تي هڪ اعلان آهي ته اسان جي طريقي جي عام رويي ۾ هڪ استثنا اڇلائڻ شامل آهي. ان ڪري، ڪو به طريقو استعمال ڪري ٿو ڄاڻي ٿو ته هن کي استثنيٰ کي سنڀالڻ لاءِ ڪوڊ لکڻ گهرجي.

ٻين کي ڊيڄاريندڙ "مصيبت" بابت

جيڪڏهن توهان پنهنجي طريقي ۾ استثنا کي هٿي ڏيڻ جو منصوبو نه ٿا ڪريو، پر ٻين کي ڊيڄارڻ چاهيو ٿا ته استثنا ٿي سگهي ٿي، استعمال ڪريو اڇلائي لفظ . ھن لفظ جو طريقو دستخط ۾ مطلب آھي، ڪجھ شرطن جي تحت، طريقو ھڪڙو استثنا اڇلائي سگھي ٿو. هي ڊيڄاريندڙ طريقو انٽرفيس جو حصو آهي ۽ ان جي استعمال ڪندڙن کي انهن جي پنهنجي استثنيٰ سنڀالڻ واري منطق کي لاڳو ڪرڻ جي اجازت ڏئي ٿي. اڇلائڻ کان پوء، اسان اڇلائي استثناء جا قسم بيان ڪريون ٿا. اهي عام طور تي جاوا جي استثنا ڪلاس مان نڪرندا آهن. جيئن ته جاوا هڪ اعتراض تي مبني ٻولي آهي، سڀ استثنا جاوا ۾ شيون آهن. جاوا ۾ استثنا - 3

استثناءَ جو درجو

جڏهن ڪا نقص ٿئي ٿي جڏهن هڪ پروگرام هلي رهيو آهي، JVM مناسب قسم جو هڪ اعتراض ٺاهي ٿو جاوا استثناءَ واري درجي کان - ممڪن استثنان جو هڪ سيٽ جيڪو هڪ عام ابن ڏاڏن کان نازل ٿئي ٿو - اڇلائي لائق طبقو . اسان غير معمولي رن ٽائم حالتن کي ٻن گروپن ۾ ورهائي سگھون ٿا:
  1. حالتون جن مان پروگرام بحال نه ٿي سگھي ۽ عام آپريشن جاري رکي.
  2. حالتون جتي بحالي ممڪن آهي.
پهرين گروپ ۾ حالتون شامل آهن جن ۾ هڪ استثنا شامل آهي جيڪو نقص جي طبقي مان نازل ٿئي ٿو. اهي غلطيون آهن جيڪي JVM جي خرابي، ياداشت جي اوور فلو، يا سسٽم جي ناڪامي جي سبب ٿينديون آهن. اهي عام طور تي سنجيده مسئلا ظاهر ڪن ٿا جيڪي سافٽ ويئر طرفان مقرر نه ٿي سگهن ٿيون. جاوا ۾، اهڙي استثناء جو امڪان مرتب ڪندڙ طرفان چڪاس نه ڪيو ويو آهي، تنهنڪري اهي اڻ چيڪ ٿيل استثنا طور سڃاتل آهن. ھن گروپ ۾ RuntimeExceptions پڻ شامل آھن، جيڪي استثنا آھن جيڪي استثنا ڪلاس مان نڪرندا آھن ۽ رن ٽائيم تي JVM پاران ٺاھيا ويندا آھن. اهي اڪثر ڪري پروگرامنگ جي غلطين جي ڪري آهن. اهي استثنا پڻ چيڪ نه ڪيا ويا آهن (اڻ چيڪ ٿيل) گڏ ڪرڻ وقت، تنهنڪري توهان کي انهن کي سنڀالڻ لاء ڪوڊ لکڻ جي ضرورت ناهي. ٻئي گروپ ۾ غير معمولي حالتون شامل آھن جيڪي اڳڪٿي ڪري سگھجن ٿيون جڏھن توھان پروگرام لکي رھيا آھيو (۽ اھڙيءَ طرح توھان کي انھن کي سنڀالڻ لاءِ ڪوڊ لکڻ گھرجي). اهڙن استثناءَ کي چئجي ٿو چيڪ ٿيل استثنا. جڏهن اهو استثنا اچي ٿو، اڪثر جاوا ڊولپر جو ڪم اهڙين حالتن کي سنڀاليندو آهي.

هڪ استثنا ٺاهڻ

جڏهن هڪ پروگرام هلندو آهي، استثنا پيدا ڪيا ويندا آهن يا ته JVM طرفان يا دستي طور تي اڇلائي بيان استعمال ڪندي. جڏهن اهو ٿئي ٿو، هڪ استثنا اعتراض ميموري ۾ ٺاهي وئي آهي، پروگرام جي مکيه وهڪري ۾ مداخلت ڪئي وئي آهي، ۽ JVM جو استثنا هينڊلر استثنا کي سنڀالڻ جي ڪوشش ڪندو آهي.

استثنا سنڀالڻ

جاوا ۾، اسان ڪوڊ بلاڪ ٺاهيندا آهيون جتي اسان ڪوشش ڪريون ٿا استثنا سنڀالڻ جي ضرورت کي استعمال ڪندي try{}catch , try{}catch{}finally , and try{}finally{} constructs. جاوا ۾ استثنا - 4جڏهن هڪ استثنا هڪ ​​ڪوشش بلاڪ ۾ اڇلايو ويندو آهي، JVM ايندڙ ڪيچ بلاڪ ۾ مناسب استثنا هيلر ڳولي ٿو. جيڪڏهن ڪيچ بلاڪ وٽ گهربل استثنا هينڊلر آهي، ڪنٽرول ان ڏانهن گذري ٿو. جيڪڏهن نه، ته پوءِ JVM وڌيڪ هيٺ ڏسندي ڪيچ بلاڪ جي زنجير کي جيستائين مناسب هينڊلر نه ملي. ڪيچ بلاڪ تي عمل ڪرڻ کان پوء ، ڪنٽرول اختياري آخرڪار بلاڪ ڏانهن منتقل ڪيو ويو آهي. جيڪڏهن ڪو مناسب ڪيچ بلاڪ نه مليو، ته پوءِ JVM پروگرام کي روڪي ٿو ۽ اسٽيڪ ٽريس (موجوده اسٽيڪ آف ميٿڊ ڪالز) ڏيکاري ٿو، پهرين انجام ڏيڻ کان پوءِ جيڪڏهن اهو موجود آهي آخرڪار بلاڪ کي انجام ڏيڻ کان پوءِ. استثنا سنڀالڻ جا مثال:
public class Print {

     void print(String s) {
        if (s == null) {
            throw new NullPointerException("Exception: s is null!");
        }
        System.out.println("Inside print method: " + s);
    }

    public static void main(String[] args) {
        Print print = new Print();
        List list= Arrays.asList("first step", null, "second step");

        for (String s : list) {
            try {
                print.print(s);
            }
            catch (NullPointerException e) {
                System.out.println(e.getMessage());
                System.out.println("Exception handled. The program will continue");
            }
            finally {
                System.out.println("Inside finally block");
            }
            System.out.println("The program is running...");
            System.out.println("-----------------");
        }

    }
    }
هتي مکيه طريقا جا نتيجا آهن :
Inside print method: first step
Inside finally block
The program is running...
-----------------
Exception: s is null!
Exception handled. The program will continue
Inside finally block
The program is running...
-----------------
Inside print method: second step
Inside finally block
The program is running...
-----------------
آخرڪار عام طور تي استعمال ڪيو ويندو آهي بند ڪرڻ لاءِ ڪنهن به اسٽريم کي ۽ آزاد ڪرڻ لاءِ ڪنهن به وسيلن کي کوليو / مختص ڪيل ڪوشش بلاڪ ۾. تنهن هوندي، جڏهن هڪ پروگرام لکندو آهي، اهو هميشه ممڪن ناهي ته سڀني وسيلن جي بندش جي ٽريڪ رکو. اسان جي زندگين کي آسان بڻائڻ لاءِ، جاوا جا ڊولپر پيش ڪن ٿا ڪوشش سان گڏ وسيلن جي تعمير، جيڪو خودڪار طريقي سان بند ڪري ٿو ڪنهن به وسيلن کي هڪ ڪوشش بلاڪ ۾ کوليو . اسان جو پهريون مثال وري لکي سگهجي ٿو ڪوشش سان وسيلن سان :
public String input() throws MyException {
    String s = null;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
        s = reader.readLine();
   } catch (IOException e) {
       System.out.println(e.getMessage());
   }
    if (s.equals("")) {
        throw new MyException ("The string cannot be empty!");
    }
    return s;
}
نسخو 7 ۾ متعارف ڪرايل جاوا صلاحيتن جي مهرباني، اسان هڪ بلاڪ ۾ مختلف استثناء کي پڪڙڻ کي گڏ ڪري سگهون ٿا، ڪوڊ کي وڌيڪ جامع ۽ پڙهڻ جي قابل بڻائي. مثال:
public String input() {
    String s = null;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
        s = reader.readLine();
        if (s.equals("")) {
            throw new MyException("The string cannot be empty!");
        }
    } catch (IOException | MyException e) {
        System.out.println(e.getMessage());
    }
    return s;
}

هيٺيون لڪير

جاوا ۾ استثنا استعمال ڪندي توهان کي "بيڪ اپ رستا" ٺاهي توهان جي پروگرامن کي وڌيڪ مضبوط بنائڻ جي اجازت ڏئي ٿي، مکيه ڪوڊ کي استثنا هينڊلنگ ڪوڊ کان الڳ ڪرڻ لاءِ ڪيچ بلاڪ استعمال ڪريو، ۽ استثنا هينڊلنگ جي ذميواري منتقل ڪرڻ لاءِ اڇلائي استعمال ڪريو جيڪو توهان جو طريقو استعمال ڪري ٿو.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION