جاوا ورچوئل مشین (جسے بعد میں JVM کہا جاتا ہے) کوڈ پر کارروائی کرتی ہے اور طریقہ سے شروع کرتے ہوئے ایک کے بعد ایک طریقے چلاتی ہے
main
۔ جب یہ اگلے طریقہ تک پہنچتا ہے، تو یہ کہتا ہے کہ یہ طریقہ اسٹیک کے اوپری حصے میں ہے۔ ایک طریقہ کے مکمل طور پر کام کرنے کے بعد، اسے اسٹیک سے ہٹا دیا جاتا ہے اور قطار میں اگلا طریقہ تبدیل کر دیا جاتا ہے۔ اصول کو ظاہر کرنے کے لیے، یہ کوڈ ٹائپ کریں:
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 (جاوا ورچوئل مشین) )، آپ کو یاد ہے، ٹھیک ہے؟) ایرر ہینڈلرز کو تلاش کرے گا، مثال کے طور پر بلاک 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: / by zero at 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
۔ جاوا نے اس بات کو یقینی بنایا کہ اسے اس طریقے سے سنبھالا گیا 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
اسے بلایا گیا تھا۔ اور طریقہ کی آخری لائن " End Main طریقہ " کو main
ظاہر کرنے کے قابل تھی ۔ یہ بہت، بہت اہم ہے۔ اگر آپ کو اس کے بعد کے کام کے لیے، سے قدر کی ضرورت ہے ۔ اور اگر قدر وہاں نہیں ہے، تو ہو سکتا ہے کہ آپ کا پروگرام آپ کی توقع کے مطابق بالکل کام نہ کرے۔ جب آپ آؤٹ پٹ ونڈو میں اسٹیک ٹریس دیکھتے ہیں، تو صرف یہ جان لیں کہ پہلی لائن وہیں ہے جہاں مسئلہ پیش آیا، اور باقی لائنیں (اگر یقیناً کوئی ہیں) وہیں ہیں جہاں استثنیٰ کو اسٹیک میں پھیلایا گیا تھا، عام طور پر اس کے ساتھ ختم ہوتا ہے ۔ homeandlearn.co.uk سے ترجمہ ہم کہتے ہیں کہ آپ کا شکریہ: سرگئی سیسویف، ٹری فیڈ... m1
main
main
GO TO FULL VERSION