JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ استثنا (جاوا استثنا)

جاوا ۾ استثنا (جاوا استثنا)

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

جاوا جا استثنا ڪهڙا آهن

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

مختصر طور تي لفظن جي باري ۾ ڪوشش ڪريو، پڪڙي، آخرڪار، اڇلائي

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

public String input() throws MyException {//warn with throws,
// that the method can throw MyException
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String s = null;
// in the try block we enclose the code in which an exception can occur, in this
// if the compiler tells us that the readLine() method of the class
// BufferedReader may throw an I/O exception
    try {
        s = reader.readLine();
// in the catch block we enclose the code for handling the IOException exception
    } catch (IOException e) {
        System.out.println(e.getMessage());
// close the read stream in the finally block
    } finally {
// when closing the stream, an exception is also possible, for example, if it was not opened, so we “wrap” the code in a try block
        try {
            reader.close();
// write exception handling when closing the read stream
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    if (s.equals("")) {
// we decided that an empty string could disrupt the work of our program in the future, for example, on the result of this method, we need to call the substring(1,2) method, so we are forced to interrupt the program execution with the generation of our exception type MyException using throw
        throw new MyException("String can not be empty!");
    }
    return s;
}

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

اچو ته هڪ حقيقي دنيا جو مثال ڏسو. تصور ڪريو ته ھاءِ وي تي ھڪڙو سيڪشن آھي ھڪڙو ايمرجنسي پل سان محدود لوڊ گنجائش سان. جيڪڏهن ڪا گاڏي پل جي کڻڻ جي گنجائش کان وڌي وڃي ته ان کي پار ڪري، اهو ڪري سگهي ٿو، ۽ ڊرائيور لاءِ صورتحال پيدا ٿي سگهي ٿي، ان کي نرميءَ سان، غير معمولي رکڻ لاءِ. ائين ٿيڻ کان روڪڻ لاءِ، روڊ سروس اڳ ۾ ئي روڊ تي ڊيڄاريندڙ نشانيون نصب ڪري ٿي. ڪار جو ڊرائيور، ڊيڄاريندڙ نشاني کي ڏسي، پنهنجي ڪار جي وزن کي پل تي ڊرائيونگ جي اجازت ڏنل وزن سان مقابلو ڪندو. جيڪڏهن اهو ان کان وڌيڪ آهي، هو هڪ رخ اختيار ڪندو. روڊ سروس جي عملن جي مهرباني، ٽرڪ ڊرائيور، پهريون ڀيرو، اڳ ۾ ئي پنهنجو رستو تبديل ڪرڻ جو موقعو ڏنو ويو، ٻيو، انهن کي مکيه رستي تي خطري بابت خبردار ڪيو ويو، ۽ آخرڪار، انهن کي استعمال ڪرڻ جي ناممڪن بابت خبردار ڪيو ويو. پل خاص حالتن هيٺ.
Исключения в Java - 2
پروگرام ۾ هڪ استثنا کي روڪڻ ۽ حل ڪرڻ جي صلاحيت ته جيئن اهو جاري رهي سگهي جاوا ۾ استثنا استعمال ڪرڻ جو هڪ سبب آهي. استثنا ميڪانيزم پڻ توهان کي اجازت ڏئي ٿو ته توهان جيڪو ڪوڊ لکو (پروگرامنگ انٽرفيس) استعمال ڪندڙ طرفان غلط استعمال کان (چڪنگ) اچڻ واري ڊيٽا جي تصديق ڪندي. هاڻي اچو ته ٽريفڪ پوليس هڪ سيڪنڊ لاءِ. پهرين، توهان کي انهن هنڌن کي ڄاڻڻ گهرجي جتي موٽرسائيڪل مصيبت ۾ پئجي سگهي ٿي. ٻيو، توهان کي ڊيڄاريندڙ نشانيون تيار ڪرڻ ۽ انسٽال ڪرڻ جي ضرورت آهي. آخرڪار، توهان کي مکيه رستي تي خطري جي صورت ۾ detor رستا مهيا ڪرڻ جي ضرورت آهي. جاوا ۾، استثنا ميڪانيزم ساڳئي طريقي سان ڪم ڪري ٿو. پروگرام ڊولپمينٽ اسٽيج تي، اسان ڪوڊ جي خطرناڪ حصن کي استثنا کان "محفوظ" ڪريون ٿا ڪوشش{} بلاڪ کي استعمال ڪندي، "بيڪ اپ" رستا مهيا ڪريو استعمال ڪندي ڪيچ{} بلاڪ، ۽ آخر ۾{} بلاڪ ۾ اسان ڪوڊ لکون ٿا جيڪو عمل ڪيو ويو آهي. ڪنهن به نتيجن لاء پروگرام. حالتن ۾ جتي اسان "هنگامي رستو" مهيا نه ڪري سگهون ٿا يا عمدي طور استعمال ڪندڙ کي اختيار ڇڏڻ چاهيون ٿا، اسان کي گهٽ ۾ گهٽ هن کي خطري بابت خبردار ڪرڻ گهرجي. ڇو؟ بس هڪ ڊرائيور جي ناراضگي جو تصور ڪريو جيڪو هڪ ايمرجنسي پل تي پهچندو جنهن کي رستي ۾ هڪ ڊيڄاريندڙ نشاني سان منهن ڏيڻ کان سواءِ پار نه ٿو ڪري سگهجي! پروگرامنگ ۾، جڏهن اسان جا ڪلاس ۽ طريقا لکندا آهيون، اسان هميشه انهن جي پروگرامن ۾ ٻين ڊولپرز پاران انهن جي استعمال جي حوالي سان اڳڪٿي نٿا ڪري سگهون، تنهنڪري اسان استثنا واري صورتحال کي حل ڪرڻ لاءِ 100٪ صحيح رستو پيش نه ٿا ڪري سگهون. ساڳئي وقت، اسان جي ڪوڊ جي استعمال ڪندڙن کي هڪ استثنا جي امڪان جي باري ۾ ڊيڄارڻ لاء سٺو عمل آهي. جاوا جي استثنا واري ميڪانيزم اسان کي اجازت ڏئي ٿي اڇلائي استعمال ڪندي - لازمي طور تي بيان ڪري ٿو ته اسان جي طريقي جي عام رويي کي استثنا اڇلائڻ لاءِ، ان ڪري ان کي ڇڏي وڃي ٿو طريقي جي استعمال ڪندڙ کي ڪوڊ لکڻ لاءِ ڪوڊ لکڻ لاءِ جاوا ۾.

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

جڏهن توهان پنهنجي طريقي ۾ هڪ استثنا کي سنڀالڻ جو ارادو نه ڪيو، پر ممڪن استثناء جي حالتن جي باري ۾ طريقي جي استعمال ڪندڙن کي ڊيڄاريو، اڇلائي لفظ استعمال ڪريو. هي لفظ هڪ طريقي جي دستخط ۾ مطلب آهي ته ڪجهه شرطن جي تحت طريقو هڪ استثنا اڇلائي سگھي ٿو. هي ڊيڄاريندڙ طريقو انٽرفيس جو حصو آهي ۽ صارف کي اختيار ڏئي ٿو ته استثنيٰ هينڊلر جي عمل کي ترتيب ڏئي. اڇلائڻ کان پوءِ اسان اشارو ڪريون ٿا ته استثنا جو قسم اڇلايو پيو وڃي. اهي عام طور تي جاوا استثنا طبقي جا اولاد آهن . جيئن ته جاوا هڪ اعتراض تي مبني ٻولي آهي، جاوا ۾ سڀئي استثنا شيون آهن.
Исключения в Java - 3

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

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

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

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

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

ڪوڊ بلاڪز جي ٺاھڻ جنھن لاءِ اسان جاوا ۾ استثنائي ھٿ ڪرڻ جي مھرباني ڪريون ٿا پروگرام ۾ استعمال ڪيو ويندو آھي try{}catch, try{}catch{}finally, try{}finally{} constructs.
Исключения в Java - 4
جڏهن هڪ استثنائي ڪوشش ڪئي وئي بلاڪ ۾، استثنا هينڊلر کي هيٺ ڏنل ڪيچ بلاڪ ۾ ڳوليو ويندو آهي. جيڪڏهن ڪيچ هن قسم جي استثنا لاءِ هينڊلر تي مشتمل آهي، ڪنٽرول ان ڏانهن گذري ٿو. جيڪڏهن نه، JVM انهي استثنا جي قسم لاءِ هڪ هينڊلر ڳولي ٿو طريقي جي ڪالن جي زنجير ۾ جيستائين هڪ مناسب پڪڙي نه ملي. ڪيچ بلاڪ تي عمل ٿيڻ کان پوء، ڪنٽرول اختياري آخرڪار بلاڪ ڏانهن منتقل ڪيو ويو آهي . جيڪڏهن ڪو مناسب ڪيچ بلاڪ نه مليو آهي، JVM پروگرام جي عمل کي روڪي ٿو ۽ ميٿڊ ڪالز جو هڪ اسٽيڪ ڏيکاري ٿو - stack trace ، اڳ ۾ ئي ختم ٿيل بلاڪ ڪوڊ، جيڪڏهن موجود هجي. استثنا سنڀالڻ جا مثال:
public class Print {

     void print(String s) {
        if (s == null) {
            throw new NullPointerException("Exception: s is null!");
        }
        System.out.println("Inside method print: " + 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 was processed. Program continues");
            }
            finally {
                System.out.println("Inside bloсk finally");
            }
            System.out.println("Go program....");
            System.out.println("-----------------");
        }

    }
    }
مکيه طريقي جا نتيجا :
Inside method print: first step
Inside bloсk finally
Go program....
-----------------
Exception: s is null!
Exception was processed. Program continues
Inside bloсk finally
Go program....
-----------------
Inside method print: second step
Inside bloсk finally
Go program....
-----------------
بلاڪ finallyعام طور تي استعمال ڪيو ويندو آهي بند ڪرڻ لاءِ بند ٿيل اسٽريمز کي ڪوشش بلاڪ ۾ يا مفت وسيلن ڏانهن. تنهن هوندي، جڏهن هڪ پروگرام لکڻ، اهو هميشه ممڪن ناهي ته سڀني وسيلن جي بندش جي ٽريڪ رکڻ لاء. اسان جي زندگين کي آسان ڪرڻ لاء، جاوا ڊولپرز اسان کي هڪ تعمير پيش ڪيو آهي try-with-resourcesجيڪو خودڪار طريقي سان بند ڪري ٿو وسيلن کي کولڻ جي ڪوشش ۾ بلاڪ. اسان جو پهريون مثال هن طرح ٻيهر لکي سگهجي ٿو try-with-resources:
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 ("String can not 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("String can not 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