JavaRush /جاوا بلاگ /Random-UR /جاوا اسٹیک ٹریس
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) / صفر کے ذریعے مین طریقہ سے باہر نکلتا ہے نوٹس کریں کہ ایرر میسج پرنٹ کیا گیا تھا: " / بائی صفر " . طریقہ m2مکمل طور پر عمل میں نہیں آیا، لیکن جب کوئی خرابی پیش آئی تو اسے روک دیا گیا۔ پھر کنٹرول واپس منتقل کر دیا گیا m1۔ یہ اس حقیقت کی وجہ سے ہوا کہ بلاک نے catchخود غلطی کو پہچان لیا؛ JVM نے معیاری ایرر ہینڈلر سے رابطہ نہیں کیا، لیکن بلاک کے گھنگھریالے منحنی خطوط وحدانی کے درمیان واقع ایک پیغام دکھایا catch۔ براہ کرم نوٹ کریں کہ پروگرام خود بند نہیں ہوا ہے۔ کنٹرول، ہمیشہ کی طرح، اس طریقہ پر چلا گیا mainجس سے m1اسے بلایا گیا تھا۔ اور طریقہ کی آخری لائن " End Main طریقہ " کو mainظاہر کرنے کے قابل تھی ۔ یہ بہت، بہت اہم ہے۔ اگر آپ کو اس کے بعد کے کام کے لیے، سے قدر کی ضرورت ہے ۔ اور اگر قدر وہاں نہیں ہے، تو ہو سکتا ہے کہ آپ کا پروگرام آپ کی توقع کے مطابق بالکل کام نہ کرے۔ جب آپ آؤٹ پٹ ونڈو میں اسٹیک ٹریس دیکھتے ہیں، تو صرف یہ جان لیں کہ پہلی لائن وہیں ہے جہاں مسئلہ پیش آیا، اور باقی لائنیں (اگر یقیناً کوئی ہیں) وہیں ہیں جہاں استثنیٰ کو اسٹیک میں پھیلایا گیا تھا، عام طور پر اس کے ساتھ ختم ہوتا ہے ۔ homeandlearn.co.uk سے ترجمہ ہم کہتے ہیں کہ آپ کا شکریہ: سرگئی سیسویف، ٹری فیڈ... m1mainmain
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION