JavaRush /Java blogi /Random-UZ /Java stek izi
IvanDurov
Daraja

Java stek izi

Guruhda nashr etilgan
Java virtual mashinasi (keyingi o'rinlarda JVM) kodni qayta ishlaydi va usuldan boshlab usullarni birin-ketin ishga tushiradi main. Keyingi usulga yetganda, bu usul stekning yuqori qismida ekanligini aytadi. Usul to'liq bajarilgandan so'ng, u stekdan chiqariladi va navbatdagi navbatdagi bilan almashtiriladi. Printsipni ko'rsatish uchun ushbu kodni kiriting: Java stek izi - 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)");
    }
}
Bizda uchta usul mavjud: usul main, usul m1va usul m2. Dastur ishga tushganda, usul stekning yuqori qismida joylashgan main. Usul ichida mainusul deyiladi m1. Chaqirilsa, u stackning tepasiga sakrab chiqadi. Usul m1o'z navbatida ni chaqiradi m2. Endi usul m2stekning yuqori qismiga o'tadi va vaqtincha o'chiriladi m1. Buni bir soniya tasavvur qiling - maintepada m1va tepada m2! O'z biznesini amalga oshirgandan so'ng, m2u tugaydi va boshqaruv ga qaytadi m1. Usul m1tugallangach, stekdan chiqariladi va boshqaruv yana usulga beriladi main. Dasturingizni ishga tushiring va chiqish oynasiga qarang: Asosiy usul muvaffaqiyatli ishlaydi Birinchi usul salom deydi!(m1) Ikkinchi usul salom deydi(m2) Asosiy usuldan chiqadi. Agar usulda biror narsa noto'g'ri bo'lsa m2, JVM (Java Virtual Machine) ), eslaysizmi, to'g'rimi?) xato ishlov beruvchilarni qidiradi, masalan, blok try … catch. Agar xato ishlov berish usulida xatolik bo'lmasa m1, istisno usulga o'tkaziladi m1, u buni hal qila oladi degan umidda. Agar bu yerda xato ishlov beruvchini aniqlamasa, istisno yana stekni yuqoriga ko'taradi, bu safar usul main. Agar usul mainistisnoni ushlamasa, siz chiqish oynasida chop etilgan g'alati xato xabarini olasiz. Misol tariqasida, usulingizni m2quyidagicha ko'ring:
static void m2() {
    int x = 10;
    int y = 0;
    double z = x / y;
    System.out.println( z );
    System.out.println("Method Two - m2");
}
Ushbu usul nolga bo'linish xatosini o'z ichiga oladi. Mana dasturning toʻliq versiyasi, oʻzingiznikini tekshiring:
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");
    }
}
Dasturni ishga tushiring va chiqish oynasi sizga nima berishini ko'ring: Asosiy usul muvaffaqiyatli ishladi Birinchi usulda salom!(m1) "main" java.lang.ArithmeticExceptiondagi istisno: / errorhandling.errorChecking.m2(<u) da nolga >errorChecking. java:17</u>) errorhandling.errorChecking.m1(<u>Solution.java:11</u>) manzilida errorhandling.errorChecking.main(<u>>Solution.java:5</u) >) Chiqish kodi bilan yakunlangan jarayon 1 Siz stek izi deb ataladigan narsani ko'ryapsiz. Ko'k rang bilan chizilgan uchta chiziq sizning usullaringizga ishora qiladi va ularni quyidagi manzilda topish mumkin: Name_пакета.Name_класса.Name_метода Yuqoridan birinchi qator xatolik yuz bergan joy - usulda m2. ArithmeticExceptionJava uni nol xatoga bo'linadigan tarzda ishlov berishni ta'minladi . m2, m1va usullarida mainxato ishlov beruvchisi yo'q . Shunday qilib, dastur uni standart xato ishlov beruvchisi bilan qayta ishladi. Usulingizni m1quyidagiga o'zgartiring:
try {
    System.out.println("Первый метод передаёт привет!(m1)");
    m2( );
}
catch (ArithmeticException err) {
    System.out.println(err.getMessage());
}
Endi biz usulni m2blokga o'rab oldik try. Qisman catch, biz stek izida aniqlangan istisno turidan foydalanamiz - ArithmeticException. Kodni qayta ishga tushiring va chiqish oynasida quyidagilarni ko'rasiz: Asosiy usul muvaffaqiyatli ishga tushdi Birinchi usulda salom!(m1) / nolga teng. Asosiy usuldan chiqish Xato xabari quyidagicha chop etilganiga e'tibor bering: " / nolga " . Usul m2to'liq bajarilmadi, lekin xatolik yuz berganda to'xtatildi. Keyin nazorat orqaga o'tkazildi m1. Bu blokning o'zi xatoni tan olganligi sababli sodir bo'ldi catch; JVM standart xato ishlov beruvchisiga murojaat qilmadi, lekin blokning jingalak qavslari orasida joylashgan xabarni ko'rsatdi catch. E'tibor bering, dasturning o'zi to'xtatilmagan. Nazorat, odatdagidek, u chaqirilgan usulga maino'tdi m1. Va usulning oxirgi qatori " End Main usulimain " ni ko'rsatishga muvaffaq bo'ldi . Bu juda, juda muhim. dan qiymat kerak bo'lsa , keyingi ish uchun . Va agar qiymat mavjud bo'lmasa, dasturingiz siz kutganingizdek ishlamasligi mumkin. Chiqarish oynasida stek izini ko'rganingizda, shuni bilingki, birinchi qator muammo yuzaga kelgan joy, qolgan satrlar (agar mavjud bo'lsa) istisnolar stek bo'ylab tarqalib, odatda bilan tugaydi . homeandlearn.co.uk dan tarjima Biz sizga rahmat aytamiz: Sergey Sisoev, Treefeed... m1mainmain
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION