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:
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 m1
va usul m2
. Dastur ishga tushganda, usul stekning yuqori qismida joylashgan main
. Usul ichida main
usul deyiladi m1
. Chaqirilsa, u stackning tepasiga sakrab chiqadi. Usul m1
o'z navbatida ni chaqiradi m2
. Endi usul m2
stekning yuqori qismiga o'tadi va vaqtincha o'chiriladi m1
. Buni bir soniya tasavvur qiling - main
tepada m1
va tepada m2
! O'z biznesini amalga oshirgandan so'ng, m2
u tugaydi va boshqaruv ga qaytadi m1
. Usul m1
tugallangach, 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 main
istisnoni ushlamasa, siz chiqish oynasida chop etilgan g'alati xato xabarini olasiz. Misol tariqasida, usulingizni m2
quyidagicha 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
. ArithmeticException
Java uni nol xatoga bo'linadigan tarzda ishlov berishni ta'minladi . m2
, m1
va usullarida main
xato ishlov beruvchisi yo'q . Shunday qilib, dastur uni standart xato ishlov beruvchisi bilan qayta ishladi. Usulingizni m1
quyidagiga o'zgartiring:
try {
System.out.println("Первый метод передаёт привет!(m1)");
m2( );
}
catch (ArithmeticException err) {
System.out.println(err.getMessage());
}
Endi biz usulni m2
blokga 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 m2
to'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 main
o'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... m1
main
main
GO TO FULL VERSION