JavaRush /Java блогы /Random-KK /Java стек ізі
IvanDurov
Деңгей

Java стек ізі

Топта жарияланған
Java виртуалды машинасы (бұдан әрі - JVM) codeты өңдейді және әдістен бастап әдістерді бірінен соң бірін іске қосады main. Келесі әдіске жеткенде, бұл әдіс стектің жоғарғы жағында екенін айтады. Әдіс толығымен орындалғаннан кейін ол стектен жойылады және кезектегі келесімен ауыстырылады. Принципті көрсету үшін мына codeты теріңіз: Java стек ізі - 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 (Java виртуалды машинасы) ), есіңізде ме?) қате өңдеушілерді іздейді, мысалы блок 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: / errorhandling.errorChecking.m2(<u) мекенжайында нөлге >errorChecking. java:17</u>) errorhandling.errorChecking.m1(<u>Solution.java:11</u>) мекенжайында errorhandling.errorChecking.main(<u>>Solution.java:5</u) >) Процесс шығу codeымен аяқталды 1 Сіз стек ізі деп аталатын нәрсені қарап жатырсыз. Көк түспен сызылған үш жол сіздің әдістеріңізге қатысты және мына жерден табуға болады: Name_пакета.Name_класса.Name_метода Жоғарыдан бірінші жол қате орын алған жерде - әдісте m2. ArithmeticExceptionJava оны нөлдік қателермен бөлуді ұстанатын етіп өңдеуді қамтамасыз етті . 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Әдістің соңғы жолында « Негізгі әдісті аяқтауmain » көрсетіле алды . Бұл өте маңызды. Егер сізге бір жерде келесі жұмыс үшін мәні қажет болса . Ал егер мән жоқ болса, сіздің бағдарламаңыз сіз күткендей мүлдем жұмыс істемеуі мүмкін. Шығару терезесінде стек ізін көргенде, бірінші жолдың мәселе орын алған жерін, ал қалған жолдар (әрине, егер бар болса) ерекшелік стекке таралатынын, әдетте .мен аяқталатынын біліңіз . homeandlearn.co.uk сайтынан аударма Біз рахмет айтамыз: Сергей Сысоев, Treefeed... m1mainmain
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION