JavaRush /جاوا بلاگ /Random-SD /جاوا اسٽيڪ ٽريڪ
IvanDurov
سطح

جاوا اسٽيڪ ٽريڪ

گروپ ۾ شايع ٿيل
جاوا ورچوئل مشين (هتان کان پوءِ JVM) ڪوڊ کي پروسيس ڪري ٿي ۽ طريقن کي هڪ ٻئي پٺيان هلائي ٿي، طريقي سان شروع ڪندي main. جڏهن اهو ايندڙ طريقي تي پهچي ٿو، اهو چوي ٿو ته هي طريقو اسٽيڪ جي چوٽي تي آهي. هڪ طريقو مڪمل طور تي عمل ڪرڻ کان پوء، ان کي اسٽيڪ مان هٽايو ويندو آهي ۽ قطار ۾ ايندڙ هڪ طرفان تبديل ڪيو ويندو آهي. اصول کي ڏيکارڻ لاء، هي ڪوڊ ٽائپ ڪريو: جاوا اسٽيڪ ٽريس - 1
package errorhandling;

public class errorChecking {
    public static void main(String[] args) {
        System.out.println("Метод Main успешно запущен");
        m1();
        System.out.println("Метод Main заканчивает свою работу");
    }

    static void m1() {
        System.out.println("Первый метод передаёт привет!(m1)");
        m2();
    }

    static void m2() {
        System.out.println("Второй метод передаёт привет(m2)");
    }
}
اسان وٽ ٽي طريقا آهن: طريقو main، طريقو m1۽ طريقو m2. جڏهن پروگرام شروع ٿئي ٿو، طريقو اسٽيڪ جي چوٽي تي واقع آهي main. طريقي جي اندر main، طريقي کي سڏيو ويندو آهي m1. جڏهن سڏيو وڃي ٿو، هو ٽپو ڏئي اسٽيڪ جي چوٽي تي. طريقو m1موڙ ۾ سڏي ٿو m2. ھاڻي طريقو m2جمپ ڪري ٿو اسٽيڪ جي چوٽي تي، عارضي طور تي هٽائڻ m1. هن کي هڪ سيڪنڊ لاءِ تصور ڪريو - mainمٿي m1۽ مٿي تي m2! ان جو ڪاروبار مڪمل ڪرڻ کان پوء، m2اهو ختم ٿي ويندو آهي ۽ ڪنٽرول واپس واپس اچي ٿو m1. طريقو m1، مڪمل ٿيڻ تي، اسٽيڪ مان پڻ هٽايو ويندو آهي، ۽ ڪنٽرول ٻيهر طريقي سان ڏنو ويندو آهي main. پنھنجي پروگرام کي ھلايو ۽ ٻاھرين ونڊو کي ڏسو: مکيه طريقو ڪاميابيءَ سان ھلندو آھي پھريون طريقو چوي ٿو ھيلو!(m1) ٻيو طريقو چوي ٿو ھيلو (m2) مکيه طريقو نڪرندو آھي جيڪڏھن طريقي ۾ ڪجھ غلط ٿئي ٿو m2، JVM (جاوا ورچوئل مشين) )، توهان کي ياد آهي، صحيح؟) غلطي سنڀاليندڙن کي ڳوليندا، مثال طور هڪ بلاڪ try … catch. جيڪڏهن غلطي سنڀالڻ واري طريقي ۾ ڪا به نقص نه آهي m1، ته استثنا طريقي سان منظور ڪيو ويندو m1، اميد آهي ته اهو ان کي سنڀالڻ جي قابل هوندو. جيڪڏهن اهو هتي هڪ غلطي سنڀاليندڙ کي ڳولي نه ٿو، استثنا ٻيهر اسٽيڪ کي منتقل ڪندو، هن وقت طريقي سان main. جيڪڏهن طريقو mainاستثنا نه ٿو پڪڙي، توهان حاصل ڪندا هڪ عجيب غلطي پيغام ڇپيل آئوٽ ونڊو ۾. مثال طور، پنهنجو طريقو m2هن طرح ٺاهيو:
static void m2() {
    int x = 10;
    int y = 0;
    double z = x / y;
    System.out.println( z );
    System.out.println("Method Two - m2");
}
ھن طريقي ۾ ھڪڙي تقسيم صفر جي غلطي تي مشتمل آھي. هتي پروگرام جو مڪمل نسخو آهي، پنهنجو چيڪ ڪريو:
package errorhandling;

public class errorChecking {
    public static void main(String[] args) {
        System.out.println("Метод Main успешно запущен");
        m1();
        System.out.println("Метод Main заканчивает свою работу");
    }

    static void m1() {
        System.out.println("Первый метод передаёт привет!(m1)");
        m2();
    }

    static void m2() {
        int x = 10;
        int y = 0;
        double z = x / y;
        System.out.println( z );
        System.out.println("Method Two - m2");
    }
}
پروگرام کي هلايو ۽ ڏسو ته آئوٽ پُٽ ونڊو توهان کي ڇا ڏئي ٿي: مکيه طريقو ڪاميابي سان هليو پهريون طريقو چوي ٿو هيلو!(m1) ٿريڊ ۾ استثنا "main" java.lang.ArithmeticException: / by zero at errorhandling.errorChecking.m2(<u >errorChecking. java:17</u>) errorhandling.errorChecking.m1(<u>Solution.java:11</u>) تي errorhandling.errorChecking.main(<u>>Solution.java:5</u>) >) پروسيس ختم ٿي ويو نڪرڻ واري ڪوڊ سان 1 توهان ڪجهه ڳولي رهيا آهيو جنهن کي اسٽيڪ ٽريس سڏيو ويندو آهي. نيري رنگ ۾ هيٺ ڏنل ٽي لائينون توهان جي طريقن ڏانهن اشارو ڪن ٿيون، ۽ ان ۾ ڳولي سگهجن ٿيون: Name_пакета.Name_класса.Name_метода مٿين کان پهرين لڪير جتي غلطي ٿي وئي آهي - طريقي ۾ m2. جاوا انهي ڳالهه کي يقيني بڻائي ٿو ته اهو هڪ طريقي سان هٿ ڪيو ويو آهي ArithmeticExceptionجيڪو صفر جي غلطي سان ڊويزن کي پڪڙيو ويو. m2, m1۽ طريقن ۾ mainڪو به نقص سنڀاليندڙ نه آهي . تنهن ڪري پروگرام ان کي ڊفالٽ غلطي سنڀاليندڙ سان پروسيس ڪيو. پنھنجي طريقي کي m1ھيٺين ڏانھن تبديل ڪريو:
try {
    System.out.println("Первый метод передаёт привет!(m1)");
    m2( );
}
catch (ArithmeticException err) {
    System.out.println(err.getMessage());
}
هاڻي اسان طريقي کي m2هڪ بلاڪ ۾ لپي ڇڏيو آهي try. جزوي طور catch، اسان استثناء جو قسم استعمال ڪندا آهيون جيڪو اسٽيڪ ٽريس ۾ معلوم ڪيو ويو هو - ArithmeticException. ڪوڊ کي ٻيهر هلايو ۽ توهان کي آئوٽ پُٽ ونڊو ۾ هيٺيون شيون نظر اينديون: مکيه طريقو ڪاميابيءَ سان هليو پهريون طريقو چوي ٿو هيلو!(m1) / by zero مکيه طريقو نڪرندو آهي نوٽ ڪريو ته غلطي جو پيغام هن طرح ڇپيو هو: " / by zero " . طريقو m2مڪمل طور تي عمل نه ڪيو، پر روڪيو ويو جڏهن هڪ غلطي ٿي وئي. ان کان پوء ڪنٽرول واپس منتقل ڪيو ويو m1. اهو ان حقيقت جي ڪري ٿيو آهي ته بلاڪ catchپاڻ ئي غلطي کي تسليم ڪيو؛ JVM معياري ايرر هينڊلر سان رابطو نه ڪيو، پر بلاڪ جي گھميل برائنس جي وچ ۾ واقع هڪ پيغام ڏيکاريو catch. مهرباني ڪري نوٽ ڪريو ته پروگرام پاڻ کي بند نه ڪيو ويو آهي. ڪنٽرول، هميشه وانگر، طريقي ڏانهن ويو mainجنهن کان m1اهو سڏيو ويندو هو. ۽ طريقي جي آخري لڪير کي mainڊسپلي ڪرڻ جي قابل ٿي ويو " آخر مين طريقو ". هي تمام گهڻو، تمام ضروري آهي. جيڪڏھن توھان کي قيمت جي ضرورت آھي m1، بعد ۾ ڪم لاءِ main. ۽ جيڪڏهن قيمت اتي نه آهي، ته پوء توهان جو پروگرام شايد ڪم نه ڪري سگھي جيئن توهان توقع ڪئي. جڏهن توهان آئوٽ پُٽ ونڊو ۾ اسٽيڪ ٽريس ڏسو ٿا، بس ڄاڻو ته پهرين لڪير اها آهي جتي مسئلو پيش آيو، ۽ باقي سٽون (جيڪڏهن ڪو يقينن هجي) اهي آهن جتي استثنا اسٽيڪ کي پروپيگنڊا ڪيو ويو هو، عام طور تي ختم ٿئي ٿو main. homeandlearn.co.uk مان ترجمو اسان چئون ٿا توهان جي مهرباني: سرگئي سيسووف، ٽري فيڊ...
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION