JavaRush /Java блогу /Random-KY /Java стек изи
IvanDurov
Деңгээл

Java стек изи

Группада жарыяланган
Java Virtual Machine (мындан ары 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. Программаңызды иштетиңиз жана чыгаруу терезесин караңыз: Негизги ыкма ийгorктүү иштейт Биринчи ыкма салам дейт!(m1) Экинчи ыкма салам дейт(m2) Негизги ыкмадан чыгат Методдо бир нерсе туура эмес болсо m2, JVM (Java 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");
    }
}
Программаны иштетиңиз жана чыгаруу терезеси сизге эмне берерин көрүңүз: Негизги метод ийгorктүү иштеди Биринчи ыкма салам дейт!(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. Кодду кайра иштетиңиз жана чыгаруу терезесинде төмөнкүлөрдү көрөсүз: Негизги метод ийгorктүү иштеди Биринчи ыкма салам дейт!(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