جاوا مستثنیات کو صحیح طریقے سے کیسے سنبھالیں۔

جاوا مستثنیات کو صحیح طریقے سے کیسے سنبھالیں۔

بطور پروگرامنگ نوبیا ، کا تصور۔ رعایت کی ہینڈلنگ اپنے سر کو لپیٹنا مشکل ہوسکتا ہے۔ ایسا نہیں ہے کہ یہ تصور خود مشکل ہے ، لیکن اصطلاحات اسے اس سے زیادہ ترقی یافتہ لگ سکتی ہیں۔ اور یہ اتنی طاقتور خصوصیت ہے کہ اس کا غلط استعمال اور غلط استعمال ہوتا ہے۔





اس مضمون میں ، آپ سیکھیں گے کہ مستثنیات کیا ہیں ، وہ کیوں اہم ہیں ، ان کا استعمال کیسے کریں ، اور عام غلطیوں سے بچیں۔ زیادہ تر جدید زبانوں میں کسی قسم کی استثناء ہینڈلنگ ہوتی ہے ، لہذا اگر آپ کبھی جاوا سے آگے بڑھتے ہیں تو ، آپ ان میں سے زیادہ تر تجاویز اپنے ساتھ لے سکتے ہیں۔





جاوا مستثنیات کو سمجھنا۔

جاوا میں ، ایک رعایت ایک ایسی چیز ہے جو اشارہ کرتی ہے کہ کوئی غیر معمولی چیز (یا 'غیر معمولی') آپ کی درخواست کے چلنے کے دوران پیش آئی۔ ایسی مستثنیات ہیں۔ پھینک دیا ، جس کا بنیادی طور پر مطلب یہ ہے کہ ایک استثناء شے بنائی گئی ہے (اسی طرح غلطیاں اٹھائی جاتی ہیں)۔





خوبصورتی یہ ہے کہ آپ کر سکتے ہیں۔ پکڑو پھینک دیا گیا استثناء ، جو آپ کو غیر معمولی حالت سے نمٹنے اور آپ کی درخواست کو جاری رکھنے کی اجازت دیتا ہے جیسے کچھ غلط نہیں ہوا۔ مثال کے طور پر ، جبکہ C میں ایک نال پوائنٹر آپ کی درخواست کو کریش کر سکتا ہے ، جاوا آپ کو پھینکنے اور پکڑنے دیتا ہے۔

NullPointerException

s اس سے پہلے کہ ایک null متغیر کو حادثے کا سبب بننے کا موقع ملے۔



یاد رکھیں ، ایک استثناء صرف ایک شے ہے ، لیکن ایک اہم خصوصیت کے ساتھ: اسے لازمی طور پر سے بڑھایا جانا چاہیے۔

Exception

کلاس یا کوئی ذیلی کلاس۔





Exception

. اگرچہ جاوا میں ہر قسم کے بلٹ ان استثناء ہیں ، اگر آپ چاہیں تو آپ اپنا بھی بنا سکتے ہیں۔ میں سے کچھ سب سے زیادہ عام جاوا مستثنیات شامل ہیں:

  • NullPointerException
  • NumberFormatException
  • IllegalArgumentException
  • RuntimeException
  • IllegalStateException

تو کیا ہوتا ہے جب آپ کوئی استثناء دیتے ہیں؟





سب سے پہلے ، جاوا فوری طریقہ کار کے اندر دیکھتا ہے کہ آیا کوئی کوڈ ہے جو اس طرح کی رعایت کو سنبھالتا ہے جو آپ نے پھینکا ہے۔ اگر کوئی ہینڈلر موجود نہیں ہے تو ، وہ اس طریقہ کار کو دیکھتا ہے جس کو موجودہ طریقہ کہا جاتا ہے کہ آیا وہاں کوئی ہینڈل موجود ہے یا نہیں۔ اگر نہیں تو ، یہ اس طریقہ کار کو دیکھتا ہے جس نے کہا۔ کہ طریقہ ، اور پھر اگلا طریقہ ، وغیرہ۔ اگر استثناء نہیں پکڑا جاتا ہے تو ، ایپلیکیشن اسٹیک ٹریس پرنٹ کرتی ہے اور پھر کریش ہوجاتی ہے۔ (دراصل یہ صرف کریش ہونے سے کہیں زیادہ پیچیدہ ہے ، لیکن یہ اس مضمون کے دائرہ کار سے باہر ایک اعلی درجے کا موضوع ہے۔)

TO اسٹیک ٹریس ایک استثناء ہینڈلر کی تلاش میں جاوا کے ذریعے گزرے تمام طریقوں کی فہرست ہے۔ اسٹیک ٹریس کی طرح لگتا ہے:

Exception in thread 'main' java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

ہم اس سے بہت کچھ حاصل کر سکتے ہیں۔ سب سے پہلے ، پھینک دیا گیا استثنا تھا a

NullPointerException

. یہ میں ہوا

getTitle()

Book.java کی لائن 16 پر طریقہ۔ اس طریقے کو بلایا گیا تھا۔

getBookTitles()

Author.java کی لائن 25 پر۔ کہ طریقہ سے بلایا گیا تھا۔

main()

بوٹسٹریپ ڈاٹ جاوا کی لائن 14 پر۔ جیسا کہ آپ دیکھ سکتے ہیں ، یہ سب جاننے سے ڈیبگنگ آسان ہوجاتی ہے۔

لیکن ایک بار پھر ، مستثنیات کا حقیقی فائدہ یہ ہے کہ آپ استثناء کو پکڑنے ، چیزوں کو درست کرنے ، اور بغیر کسی حادثے کے دوبارہ درخواست شروع کرنے سے غیر معمولی حالت کو 'سنبھال' سکتے ہیں۔

کوڈ میں جاوا استثناء کا استعمال۔

ہم کہتے ہیں کہ آپ کے پاس ہے۔

someMethod()

جو ایک عدد کو لیتا ہے اور کچھ منطق پر عمل کرتا ہے جو کہ اگر عدد 0 سے کم یا 100 سے زیادہ ہو تو ٹوٹ سکتا ہے۔

پروگراموں کو ایک ڈرائیو سے دوسری ڈرائیو میں کیسے منتقل کیا جائے۔
public void someMethod(int value) {
if (value 100) {
throw new
IllegalArgumentException

اس استثناء کو پکڑنے کے لیے ، آپ کو کہاں جانا ہے۔

someMethod()

کہا جاتا ہے اور استعمال کریں۔ بلاک کو آزمائیں۔ :

public void callingMethod() {
try {
someMethod(200);
someOtherMethod();
} catch (IllegalArgumentException e) {
// handle the exception in here
}
// ...
}

کے اندر سب کچھ۔ کوشش کریں بلاک اس وقت تک عمل میں آئے گا جب تک کہ کوئی استثناء نہ دیا جائے۔ جیسے ہی کوئی رعایت پھینک دی جاتی ہے ، اس کے بعد کے تمام بیانات کو چھوڑ دیا جاتا ہے اور درخواست کی منطق فوری طور پر کود جاتی ہے۔ پکڑو بلاک.

ہماری مثال میں ، ہم ٹرائی بلاک میں داخل ہوتے ہیں اور فورا call کال کرتے ہیں۔

someMethod()

. چونکہ 200 0 اور 100 کے درمیان نہیں ہے ، ایک

IllegalArgumentException

پھینک دیا جاتا ہے. یہ فوری طور پر عملدرآمد کو ختم کرتا ہے۔

someMethod()

، کوشش بلاک میں باقی منطق کو چھوڑ دیتا ہے (

someOtherMethod()

کبھی نہیں کہا جاتا ہے) ، اور کیچ بلاک کے اندر عملدرآمد دوبارہ شروع کرتا ہے۔

اگر ہم نے فون کیا تو کیا ہوگا۔

someMethod(50)

اس کے بجائے؟ کی

IllegalArgumentException

کبھی نہیں پھینکا جائے گا.

someMethod()

معمول کے مطابق عمل کرے گا۔ ٹرائی بلاک معمول کے مطابق کال کرے گا۔

someOtherMethod()

جب someMethod () مکمل ہوتا ہے۔ کب

someOtherMethod()

ختم ہوتا ہے ، کیچ بلاک چھوڑ دیا جائے گا اور

callingMethod()

جاری رہے گا.

نوٹ کریں کہ آپ فی ٹرائی بلاک ایک سے زیادہ کیچ بلاکس رکھ سکتے ہیں:

public void callingMethod() {
try {
someMethod(200);
someOtherMethod();
} catch (IllegalArgumentException e) {
// handle the exception in here
} catch (NullPointerException e) {
// handle the exception in here
}
// ...
}

یہ بھی نوٹ کریں کہ ایک اختیاری۔ آخر میں بلاک بھی موجود ہے:

public void method() {
try {
// ...
} catch (Exception e) {
// ...
} finally {
// ...
}
}

آخر میں بلاک کے اندر کوڈ ہے۔ ہمیشہ پھانسی کوئی بات نہیں. اگر آپ کے پاس آزمائشی بلاک میں واپسی کا بیان ہے تو ، طریقہ کار سے واپس آنے سے پہلے بلاک کو انجام دیا جاتا ہے۔ اگر آپ کیچ بلاک میں ایک اور استثناء پھینک دیتے ہیں تو ، آخر میں بلاک کو اس سے پہلے کہ اس کے استثناء کو پھینک دیا جائے ، پھانسی دے دی جاتی ہے۔

آپ کو آخر میں بلاک استعمال کرنا چاہئے جب آپ کے پاس ایسی اشیاء ہوں جنہیں طریقہ کار ختم ہونے سے پہلے صاف کرنے کی ضرورت ہو۔ مثال کے طور پر ، اگر آپ نے ٹرائی بلاک میں کوئی فائل کھولی اور بعد میں ایک استثناء پھینک دیا ، آخر میں بلاک آپ کو طریقہ چھوڑنے سے پہلے فائل کو بند کرنے دیتا ہے۔

نوٹ کریں کہ آپ بغیر کسی بلاک کے بلاک کر سکتے ہیں:

public void method() {
try {
// ...
} finally {
// ...
}
}

یہ آپ کو کوئی ضروری صفائی کرنے دیتا ہے جبکہ پھینکے گئے استثناء کو طریقہ انوکیشن اسٹیک کو آگے بڑھانے کی اجازت دیتا ہے (یعنی آپ یہاں استثنا کو نہیں سنبھالنا چاہتے لیکن آپ کو پہلے بھی صفائی کی ضرورت ہے)۔

جاوا میں چیک شدہ بمقابلہ غیر چیک شدہ استثناء۔

زیادہ تر زبانوں کے برعکس ، جاوا کے درمیان فرق کرتا ہے۔ چیک شدہ استثناء اور غیر چیک شدہ استثناء (مثال کے طور پر C# صرف غیر چیک شدہ استثناء ہے) ایک چیک شدہ استثناء۔ لازمی اس طریقہ کار میں پکڑا جائے جہاں استثناء پھینکا جاتا ہے ورنہ کوڈ مرتب نہیں ہوگا۔

چیک شدہ استثناء بنانے کے لیے ، سے توسیع کریں۔

Exception

. غیر چیک شدہ رعایت بنانے کے لیے ، سے توسیع کریں۔

RuntimeException

.

کوئی بھی طریقہ جو چیک شدہ استثناء کو پھینکتا ہے اس کا استعمال کرتے ہوئے طریقہ دستخط میں اس کی نشاندہی کرنا ضروری ہے۔ پھینکتا ہے مطلوبہ الفاظ چونکہ جاوا بلٹ ان ہے۔

IOException

ایک چیک شدہ استثنا ہے ، درج ذیل کوڈ مرتب نہیں ہوگا:

public void wontCompile() {
// ...
if (someCondition) {
throw new IOException();
}
// ...
}

آپ کو پہلے یہ اعلان کرنا ہوگا کہ یہ ایک چیک شدہ استثناء پھینکتا ہے:

public void willCompile() throws IOException {
// ...
if (someCondition) {
throw new IOException();
}
// ...
}

نوٹ کریں کہ ایک طریقہ کو استثناء پھینکنے کے طور پر قرار دیا جاسکتا ہے لیکن حقیقت میں کبھی بھی استثنا نہیں پھینکتا۔ اس کے باوجود ، استثناء کو اب بھی پکڑنے کی ضرورت ہوگی ورنہ کوڈ مرتب نہیں ہوگا۔

آپ کو چیک شدہ یا غیر چیک شدہ استثناء کب استعمال کرنا چاہئے؟

سرکاری جاوا دستاویزات میں a اس سوال پر صفحہ . یہ فرق کو انگوٹھے کے ایک قاعدہ اصول کے ساتھ بیان کرتا ہے: 'اگر کسی کلائنٹ سے معقول طور پر توقع کی جا سکتی ہے کہ وہ کسی رعایت سے صحت یاب ہو سکتا ہے تو اسے ایک چیک شدہ رعایت بنائیں۔ اگر کوئی کلائنٹ استثناء سے بازیاب ہونے کے لیے کچھ نہیں کر سکتا تو اسے غیر چیک شدہ استثناء بنائیں۔ '

لیکن یہ ہدایات پرانی ہو سکتی ہیں۔ ایک طرف ، مستثنیات کی جانچ پڑتال کے نتیجے میں زیادہ مضبوط کوڈ ہوتا ہے۔ دوسری طرف ، کسی دوسری زبان نے جاوا کی طرح استثناء کی جانچ نہیں کی ہے ، جو دو چیزوں کو ظاہر کرتی ہے: ایک ، یہ خصوصیت دوسری زبانوں کو چوری کرنے کے لیے کافی مفید نہیں ہے ، اور دو ، آپ ان کے بغیر بالکل زندہ رہ سکتے ہیں۔ اس کے علاوہ ، چیک شدہ استثنا جاوا 8 میں متعارف کرائے گئے لیمبڈا ایکسپریشن کے ساتھ اچھی طرح نہیں چلتے ہیں۔

جاوا استثناء کے استعمال کے لیے ہدایات۔

مستثنیات مفید ہیں لیکن آسانی سے غلط استعمال اور غلط استعمال ہوتے ہیں۔ ان میں گڑبڑ کرنے سے بچنے میں آپ کی مدد کے لیے چند نکات اور بہترین طریقے یہ ہیں۔

  • مخصوص استثناء کو عام استثناء پر ترجیح دیں۔ استعمال کریں | _+_ | ختم | _+_ | جب ممکن ہو ، دوسری صورت میں | _+_ | استعمال کریں۔ ختم | _+_ | جب ممکن ہو
  • کبھی نہیں پکڑنا | _+_ | ! | _+_ | کلاس دراصل توسیع کرتی ہے | _+_ | ، اور کیچ بلاک دراصل | _+_ | کے ساتھ کام کرتا ہے۔ یا کوئی بھی کلاس جو پھینکنے کے قابل ہے۔ تاہم ، | _+_ | کلاس بھی توسیع کرتی ہے | _+_ | ، اور آپ کبھی نہیں پکڑنا چاہتے ہیں | _+_ | کیونکہ | _+_ | s سنگین ناقابل واپسی مسائل کی نشاندہی کرتے ہیں۔
  • کبھی نہیں پکڑنا | _+_ | ! | _+_ | توسیع | _+_ | ، تو کوئی بھی بلاک جو پکڑتا ہے | _+_ | بھی پکڑے گا | _+_ | ، اور یہ ایک بہت اہم رعایت ہے کہ آپ (خاص طور پر ملٹی تھریڈڈ ایپلیکیشنز میں) گڑبڑ نہیں کرنا چاہتے جب تک کہ آپ کو معلوم نہ ہو کہ آپ کیا کر رہے ہیں۔ اگر آپ نہیں جانتے کہ اس کے بجائے کون سی رعایت پکڑنی ہے تو ، کچھ نہ پکڑنے پر غور کریں۔
  • ڈیبگنگ کو آسان بنانے کے لیے وضاحتی پیغامات استعمال کریں۔ جب آپ کوئی استثناء پھینک دیتے ہیں تو آپ | _+_ | فراہم کر سکتے ہیں۔ پیغام بطور دلیل اس پیغام کو کیچ بلاک تک رسائی حاصل کی جا سکتی ہے | _+_ | طریقہ ، لیکن اگر استثنا کبھی نہیں پکڑا گیا تو ، پیغام بھی اسٹیک ٹریس کے حصے کے طور پر ظاہر ہوگا۔
  • مستثنیات کو پکڑنے اور نظر انداز نہ کرنے کی کوشش کریں۔ جانچ شدہ استثناء کی تکلیف کو دور کرنے کے لیے ، بہت سے نئے اور سست پروگرامر ایک کیچ بلاک قائم کریں گے لیکن اسے خالی چھوڑ دیں گے۔ برا! ہمیشہ اسے خوبصورتی سے سنبھالیں ، لیکن اگر آپ نہیں کر سکتے ہیں تو ، کم از کم اسٹیک ٹریس پرنٹ کریں تاکہ آپ کو معلوم ہو کہ استثناء پھینک دیا گیا تھا۔ آپ یہ استعمال کر سکتے ہیں | _+_ | طریقہ
  • مستثنیات کے زیادہ استعمال سے بچو۔ جب آپ کے پاس ہتھوڑا ہوتا ہے تو ہر چیز کیل کی طرح دکھائی دیتی ہے۔ جب آپ سب سے پہلے استثناء کے بارے میں سیکھتے ہیں تو ، آپ ہر چیز کو ایک استثناء میں تبدیل کرنے کا پابند محسوس کر سکتے ہیں۔ یاد رکھیں ، استثناء 'غیر معمولی' واقعات کے لیے ہیں!

اب آپ کو استثناء کے ساتھ کافی آرام دہ ہونا چاہئے کہ وہ کیا ہیں ، وہ کیوں استعمال کیے جاتے ہیں ، اور انہیں اپنے کوڈ میں کیسے شامل کریں۔ اگر آپ تصور کو مکمل طور پر نہیں سمجھتے ہیں تو یہ ٹھیک ہے! میرے سر میں 'کلک' کرنے میں مجھے کچھ وقت لگا ، لہذا ایسا محسوس نہ کریں کہ آپ کو جلدی کرنے کی ضرورت ہے۔ آپ اپنا وقت لیں.

کوئی سوال ہے؟ کسی اور استثناء سے متعلقہ تجاویز کے بارے میں جانتے ہیں جو میں نے یاد کیا؟ ذیل میں تبصرے میں ان کا اشتراک کریں!

بانٹیں بانٹیں ٹویٹ ای میل۔ کسی بھی پروجیکٹ کے ڈیٹا کو دیکھنے کے لیے ڈیٹا فلو ڈایاگرام کیسے بنایا جائے۔

کسی بھی عمل کا ڈیٹا فلو ڈایاگرام (DFD) آپ کو سمجھنے میں مدد کرتا ہے کہ ڈیٹا کس طرح منبع سے منزل تک پہنچتا ہے۔ اسے بنانے کا طریقہ یہاں ہے!

اگلا پڑھیں۔
متعلقہ موضوعات۔
  • پروگرامنگ۔
  • جاوا
مصنف کے بارے میں جوئل لی۔(1524 مضامین شائع ہوئے)

جوئل لی 2018 سے میک اپ آف کے چیف ایڈیٹر ہیں۔ ان کے پاس بی ایس ہے۔ کمپیوٹر سائنس میں اور نو سال سے زیادہ پیشہ ورانہ تحریر اور ترمیم کا تجربہ۔

ونڈوز 10 ورچوئل میموری تجویز کردہ سائز۔
جوئل لی سے مزید۔

ہماری نیوز لیٹر کو سبسکرائب کریں

ٹیک ٹپس ، جائزے ، مفت ای بکس ، اور خصوصی سودوں کے لیے ہمارے نیوز لیٹر میں شامل ہوں!

سبسکرائب کرنے کے لیے یہاں کلک کریں۔