 ایکسپشن ہیلنگ اب ہم بات کریں گے تھروس کلوز کی تھروس کلوز امفیکٹ کس طرح سے کام کرتا ہے اس کے بارے میں بریف اوبرویو یا بریف دسکشن ہم کرلتنے پہلے تھروس کلوز بسیقلی آپ کے function کے ہیڈرز کے ساتھ امپلیمٹ ہوتا ہے اور اس سے آگے آپ لیسٹ آف ایکسپشن کلاسز منجن کرتنے یہ کاما سپریٹرڈ لیسٹ ہوتی ہے اس کا مطلب پہلی ایکسپشن کلاسز اس کے بعد کاما اس کے بعد دوسری ایکسپشن کلاسز اور یہ ملٹپل ایکسپشن کلاسز ہو سکتی ہیں بیسک اپڑکٹیف یہ ہے کہ تھروس کلوز اپلائے کرنے کا function کے ہیڈرز کے ساتھ کہ آپ اس پرٹکلر function کی امپلیمٹیشن میں ایکسپشن طرح تو ایڈرنٹی پائے کرنے ہیں کہ اس function کی امپلیمٹیشن میں یہ ساری کی ساری پوشبل ایکسپشن آنے کی چانسز ہیں بٹ آپ ان کو پرائی یا کیج کے ذریعے ہندل نہیں کرے اس function میں یعنی آپ دیلیبریٹلی اس کی امپلیمٹیشن جو ہے اسے آپ کالر کے اوپر امپلوز کریں آپ چاہرے ہیں کہ جو بھی اس function کو کال کرے وہ یہ ساری کی ساری کیساری کیچرز خود امپلمٹ کرے وہ ہمیں سمجھنی ہے وہ دیکھنی ہے کہ actually philosophy ہے کیا دیکھیں اس میں بہت ساری کلاسز جاوہ یا third parties جو ہے وہ لکھ رہیں ہیں اور وہ اگر بہت ساری functions انہوں نے امپلیمٹ کییں اور ان function میں اگر try catch خود سے امپلیمٹ کریں گے اور catch میں ظاہر ہے انہوں نے exception handling کے ساتھ کچھ messج بھی دینے جناریک ہو سکتے سپسیفک نہیں ہو سکتے لیکن جب ہم اپنے کسی softpair میں ان کلاسز کو use کرتے ہیں اور وہ exceptions generate ہوتی ہیں تو ہو سکتا ہے وہ messages ہمارے لیے بہت relevant now یا وہ handling جو انہوں نے کیوی وہ ہمارے لیے سپسیفکلی بہت relevant now وہ انہوں نے generic form ایک exception handle کیوی ہے لیکن جب ہم اسے handle کرنا جاتے ہم ایک car need ہم اسے handle کرنا جاتے تو اس کا مطلب یہ ہوا کہ یہ deliberately جو ان چیزوں کو چھوڑا گیا ہے اس کے پیچھے باقائدہ ایک thought process ہے کہ یہ exceptions آ سکتے انہوں نے list out کر دیا ہے but ان کو handle کرنے کی ایک labor جو ہے یہ ان کے اوپر چھوڑ دی گئے ہے جو ان functions کو call کر رہے ہیں تاکہ وہ اپنے متابق ان کی exceptions کو handle کرنے messages کو define کرنے اپنے متابق ان میں functions کو call کرسکے exception کو deal کرنے تو یہ basic thought process ہے اس پورے clause کے پیچھے اس throws clause کے پیچھے تو basically ہم اس کا syntax دیکھتے ہیں throws clause can be specified in the method header like this جس a some method ایک method name ہے اس کے بعد throws کا keyword آ جاتے ایک exception type 1 اس کے بعد comma exception type 2 comma اور یہ dot dot سے چلتی چلی جارے اور exception type n اور اس کے بعد function کی body start تو یہ ایک basic mechanism ہے جس میں آپ list of exception classes mention کر سکتے ہیں function کی header کے ساتھ with throws clause ایک exception type declare an exception normally only checked exceptions are declared idea ہم already be discuss کر چکے ہیں checked exceptions کی حوالے سے تو یہاں پر exception types mention ہوں گی وہ checked exceptions ہی ہونی چاہیں ہیں the compiler enforces that the checked exceptions thrown by a method are limited to those specified in it throws clause تو it means جن کے ہم catches لکھ رہے ہوں گے یہ وہی exception classes ہوں گی جن کو ہم نے throws کیا ہوں گا اس کے علاوہ obviously نہیں ہونی چاہیں ہیں and the method can throw exception that are subclasses of the checked exception in the throw clause تو obviously یہ بھی possible ہے کہ جو method you throw کر رہا ہے exception ان میں سے subclasses کو بھی the checked exceptions آپ نے وہاں mention کیونی اس کے throws میں ان کی subclasses میں بھی deal کیا جا سکتے ہیں یہ کیوں permissible ہے اس لے permissible ہے کہ polymorphically اگر آپ کسی subclass کو کاش کرتے ہیں تو وہ اب کاش ہوکے اپنی base class کو رپریزن کر دیتا ہے وہ object تو یعنی اگر کوئی subclass کا بھی اس کی exception generate ہوگی تو in fact وہ super class میں وہ exception cater ہو سکتی ہے تو یہاں پر اس لائٹ پر یہ mention کیا جا رہے ہیں throws clause can specify unchecked exception this is seldom done تو unchecked exceptions کے بارے میں ہم بڑے کلیر ہیں ہم انہیں اس طرح سے use یا utilize نہیں کریں گے with the throws clause a checked exception can be thrown directly by using the throw or indirectly by calling other method that can throw a checked exception تو checked exceptions کو یا تو ہم throw keyword سے use کر سکتے ہیں جس کو ہم نے earlier discuss کیا یعنی خود سے ہم exception generate کروا سکتے ہیں کسی condition کو چیک کر کے یا indirectly by calling other method can throw a checked exception یا پھر کسی دوسرے method کے ذریعے جوکے throw exception generate کر رہا ہے تو یہ بسکلی دو طریقہ کار ہیں جن سے ہم exceptions کو درکلی generate کروا سکتے ہیں checked exception is thrown in a method it must be handled in one of three ways جس function کے ہیدر میں آپ throws clause لگاتے ہیں ان کو تین طریقوں سے deal کیا جانا چاہیے ہم دسکل کر لیتے ہیں سب سے پہلہ طریقہ ہے by using a try block and catching the exception in a handler and dealing with it تو سب سے سمپل باتی ہیں کہ جہاں اسے call کیا جا رہے ہیں وہاں پر آپ کو try block impose کرنا ہے try block میں آپ نے اس کے لیے relevant catch block define کرنا ہے جو اس کی یا list میں جتنے بھی exceptions ڈیوی ہم کے relevant further try block and catching the exception in a handler آپ حنلر میں exception catch کرنے but throwing the exception that is either unchecked or declare it in its throw clause تو اور پھر آپ دوبارہ ایک exception وہاں سے یعنی throw کے ذریعے ایک اور نئی exception generate کرنے وہ uncheck بھی ہو سکتی ہے یا declare کی جہاں کی گئیو in its throw clause تو یہ بھی possible ہے کہ آپ catch میں generate exception but اس کو throw کروا دیں کوئی نہیں exception explicitly allowing propagation of exception to its caller by declaring in the throw clause of its method header یا پھر یہ ہے کہ explicitly allow کر دیں exception to its caller by declaring in the throws clause of its method header جو بھی method header میں exception generate ہوئی ہے اس کو پھر automatically call یہاں پر اب ہم دیکھتے ہیں demo average8.java جس میں ہم دیکھیں گے کہ کس طرح سے ہم اپنی exception classes بنا سکتے ہیں اور اون exception classes کو ہم use کر سکتے ہیں اس پروگرام میں تو ہم دیکھتے ہیں demo یہ ہماری class ہے average8 اور اس کو دیسکس کرنے سے پہلے ہم دیکھتے ہیں ایک class ہم نے further define کی ہے integer division by 0 انٹیجر division by 0 جو ہے اسے آپ وار کریں تو extends کی ہے ہم نے exception class جو کہ ایک child class ہے throwable کی اور اس میں ایک اس کا constructor ہم نے define کیا ہے انٹیجر division by 0 اور string pass کیا ہے اس میں جو بھی string ہے وہ ہم نے super کو pass کر دیے super actually جاوہ میں ایک convention ہے اور parenthesis میں آپ نے وہی string اس میں pass کر دیا actually exception class کا constructor call ہو گیا ہم نے ایک exception class بنائی جس کا نام ہم نے رکھا ہے integer division by 0 جو کہ جاوہ میں default میں available نہیں ہے اب یہاں سے ہم دیکھتے ہیں static void main print average اسی طرح سے 100 or 0 print average کی وجہ سے توک آپ نے لگا ہے integer division by 0 یہ ہم نے اپنی ہی class جو بنائی ہے اس کا object یہ بنا دیا ہم نے اور finally میں آپ نے finally done in main اس کے بعد print average میں آپ نے دیکھا total sum اور total number اور یہاں پر آپ نے mention کر دیا throws integer division by 0 یہ function header میں تو اس کی وجہ سے یہاں پر اس function کے اندر آپ نے try catch نہیں لگایا اور یہاں پر اس function میں آپ نے try catch کو pending کر دیا یہاں پر صرف آپ نے normal code لکھا لیکن جہاں پر یہ function call ہو رہا ہے جیسے یہاں call ہو رہا ہے تو اس function کے اوپر لازے میں کہ یہ try اور relevant catch block Provide کرے گا جو بھی header میں integer division by any جو بھی exception classes یہاں پر Provided ہے compute average میں بالکل اسی طرح سے جیسے پہلے ہم نے کیا تھا denominator کو چیک کیا تھا اگر denominator 0 ہے تو ہم throw کریں new integer division by 0 اور یہاں یہاں مسج دے ریں integer division by 0 تو یہ بیسیکلی ایک string pass کریں جیسا ہم نے نیچے class میں دیکھا تھا کہ اس کی constructor میں string receive ہو رہا اور وہ string اس کی سپر class کو pass ہو رہا ہے which is exception class تو یہاں سے بیسیکلی یہ function start ہو رہا ہے try میں رکھنا یہ اگر ہم بغیر try کے لکھیں گے تو یہ error آئے گا آپ کے code میں اس لیے یہ try میں رکھنا ضروری ہے اس کے بعد یہ catch execute ہو گا اور اس کے بعد finally اور پھر یہ main تو آپ دیکھیں ہم اس program کی execution اور execute کر کے کلیرلی ہمیں بتا لکتا ہے کہ کس طنا سے function چل رہا ہے تو آپ دیکھیں گے یہاں پر کہ سب سے پہلے اس نے computing average تو یہ بیسیکلی یہاں سے یہ میسج آئے computing average یہاں پر number is equal to zero تھا تو throw new integer division by zero تو یہ اس نے exception throw کی exception کر ہوئی تھی بیسیکلی اس جگہ پر اب جیسے یہاں exception کر ہوئی تھی اس نے اپنے normal program کی execution یہاں terminate کی اور جہاں پر یہ function call ہوا تھا اس کا try block سے catch block کی طرف چلے گئے تو integer division by zero اس کا message تو اس نے دیکھیں print is track trace سب سے پہلے اس نے integer division by zero جو آپ نے message pass کیا تھا وہی اور باقی اس نے track کا trace پرہنٹ کر دیا آپ کے سانے اس کے بعد اس نے next line چلائی exception handle in main اس کے بعد finally done in main اور پھر exit main تو اس چیز سے آپ کو یہاں idea ہوا کہ کس طرح سے آپ اپنی ایک exception class بھی بنا سکتے ہیں اور exception class بنانے کے بعد کے اندر آپ exception handling کو ڈیفر کر سکتے ہیں throws class کے ذریعے اور یہاں پر آپ throw statement کی ذریعے اگر کو exception اکر ہوتی ہے تو اس کو خود سے جنرائٹ کر سکتے ہیں تو یہ کمپلٹ پورا package ہے exception handling کے لیے یہ ایک سمپل اس سے آپ کو یہ تینوں ways understand ہوئے ہوں گے کہ کس طرح سے آپ try catch اور finally کو use کر سکتے ہیں کس طرح سے آپ throw statement اور throw class کو use کر سکتے ہیں اور کس طرح سے آپ اپنی exception class خود سے بھی جنرائٹ کر سکتے ہیں تو hopefully آپ کو اس سے exception handling کا ایک journal idea ہوا ہوگا اور آپ اسے useful طریقے سے اپنے program میں استعمال کر سکتے ہیں