Java виртуалды машинасы (бұдан әрі - JVM) codeты өңдейді және әдістен бастап әдістерді бірінен соң бірін іске қосады
main
. Келесі әдіске жеткенде, бұл әдіс стектің жоғарғы жағында екенін айтады. Әдіс толығымен орындалғаннан кейін ол стектен жойылады және кезектегі келесімен ауыстырылады. Принципті көрсету үшін мына codeты теріңіз:
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
. ArithmeticException
Java оны нөлдік қателермен бөлуді ұстанатын етіп өңдеуді қамтамасыз етті . 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... m1
main
main
GO TO FULL VERSION