JavaRush /Блоги Java /Random-TG /Пайгирии стек Java
IvanDurov
Сатҳи

Пайгирии стек Java

Дар гурӯҳ нашр шудааст
Мошини виртуалии Java (минбаъд JVM) codeро коркард мекунад ва аз усули main. Вақте ки он ба усули навбатӣ мерасад, мегӯяд, ки ин усул дар болои стек ҷойгир аст. Пас аз пурра иҷро шудани усул, он аз стек хориҷ карда мешавад ва бо усули навбатии навбат иваз карда мешавад. Барои нишон додани принсип, ин рамзро нависед: Пайгирии стек 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. Дар дохor усул main, усул номида мешавад m1. Вақте ки даъват, ӯ ба болои стеллажьо ҷаҳида. Усул m1дар навбати худ m2. Акнун усул m2ба болои стек мегузарад ва муваққатан хориҷ карда мешавад m1. Инро як сония тасаввур кунед - mainдар боло m1ва боло m2! Пас аз анҷом додани кори худ, m2он ба итмом мерасад ва назорат ба m1. Усул m1, вақте ки ба итмом мерасад, инчунин аз стек хориҷ карда мешавад ва назорат боз ба метод дода мешавад main. Барномаи худро иҷро кунед ва равзанаи баромадро бубинед: Усули асосӣ бомуваффақият иҷро мешавад Усули якум Салом мегӯяд!(m1) Усули дуюм Салом мегӯяд(m2) Усули асосӣ мебарояд Агар дар усул ягон хатогӣ рӯй диҳад m2, JVM (Java Machine Virtual Machine) ), шумо дар хотир доред, дуруст?) коркардкунандагони хатогиҳоро ҷустуҷӯ мекунад, масалан блок 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");
}
Ин усул тақсимоти хатои сифрро дар бар мегирад. Ин аст versionи пурраи барнома, аз они худ санҷед:
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 >) Раванд бо рамзи баромад анҷом ёфт 1 Шумо чизеро мебинед, ки пайгирии стек ном дорад. Се сатри бо ранги кабуд хаттошуда ба усулҳои шумо ишора мекунад ва онҳоро дар инҷо пайдо кардан мумкин аст: Name_пакета.Name_класса.Name_метода Сатри аввал аз боло ин аст, ки хато дар куҷо рух додааст - дар метод m2. Java кафолат дод, ки он тавре кор карда мешавад 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он даъват карда шуда буд. Ва сатри охирини усул mainтавонист " Усули охири асосӣ " -ро нишон диҳад. Ин хеле ва хеле муҳим аст. Агар ба шумо арзиши аз m1, барои кори минбаъда дар ҷое лозим бошад main. Ва агар арзиш вуҷуд надошта бошад, он гоҳ барномаи шумо метавонад комилан тавре ки шумо интизор будед, кор накунад. Вақте ки шумо пайгирии стекро дар равзанаи баромад мебинед, танҳо бидонед, ки сатри аввал дар куҷо мушкилот рух додааст ва сатрҳои боқимонда (агар онҳо албатта вуҷуд дошта бошанд) дар он ҷое ҳастанд, ки истисно дар стек паҳн шуда, одатан бо main. Тарҷума аз homeandlearn.co.uk Мо ба шумо ташаккур мегӯем: Сергей Сысоев, Treefeed...
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION