"हाय, अमिगो. आज आम्ही एक अतिशय मनोरंजक धडा घेणार आहोत. मी तुम्हाला अपवादांबद्दल सांगणार आहे. अपवाद ही एक विशेष यंत्रणा आहे जी आम्हाला प्रोग्राममधील त्रुटी हाताळू देते. येथे काही त्रुटींची उदाहरणे दिली आहेत जी उद्भवू शकतात. एका कार्यक्रमात:

1. हार्ड ड्राइव्ह पूर्णपणे भरल्यावर प्रोग्राम फाइल लिहिण्याचा प्रयत्न करू शकतो.

2. प्रोग्राम व्हेरिएबलवर मेथड कॉल करण्याचा प्रयत्न करू शकतो जो शून्य संदर्भ संग्रहित करतो.

3. प्रोग्राम एखाद्या संख्येला 0 ने विभाजित करण्याचा प्रयत्न करू शकतो."

या सर्व कृतीमुळे चुका होतात. सहसा, याचा परिणाम असा होतो की प्रोग्राम ताबडतोब बंद होतो, कारण या प्रकरणात कोड कार्यान्वित करणे सुरू ठेवण्यास काही अर्थ नाही.

"का?"

"कार जर रस्त्यावरून गेली असेल आणि कड्यावरून पडली असेल तर चाक फिरवत राहण्यात काही अर्थ आहे का?"

"मग कार्यक्रम चालू करणे थांबवावे का?"

"हो. किमान, पूर्वी असेच होते. कोणत्याही त्रुटीमुळे प्रोग्राम संपुष्टात आला."

"तो एक अतिशय स्मार्ट दृष्टीकोन आहे."

"परंतु प्रोग्राम चालू ठेवण्याचा प्रयत्न करणे चांगले नाही का?"

"होय. समजा, तुम्ही वर्डमध्ये खूप मोठा मजकूर टाईप केला आणि तो सेव्ह केला. जर सेव्ह ऑपरेशन अयशस्वी झाले तर काय होईल, परंतु प्रोग्राम तुम्हाला सर्व काही ठीक आहे यावर विश्वास ठेवतो? आणि तुम्ही टाइप करत जा. ते मूर्खपणाचे होईल, नाही का? ते?"

"हो."

"मग प्रोग्रामर एक मनोरंजक उपाय घेऊन आले: प्रत्येक फंक्शन त्याच्या कामाची स्थिती परत करेल. 0 याचा अर्थ असा होतो की ते अपेक्षेप्रमाणे कार्य करते. इतर कोणत्याही मूल्याचा अर्थ असा होतो की काही त्रुटी आली आहे आणि रिटर्न मूल्य एक त्रुटी कोड आहे."

"तथापि, त्या दृष्टीकोनातही त्याच्या उणीवा आहेत. प्रत्येक (!) फंक्शन कॉलनंतर, तुम्हाला रिटर्न कोड (नंबर) तपासावा लागेल. सर्वप्रथम, हे गैरसोयीचे आहे: त्रुटी-हँडलिंग कोड क्वचितच कार्यान्वित केला जातो परंतु त्यात समाविष्ट करणे आवश्यक आहे. सर्वत्र. दुसरे, फंक्शन्स बर्‍याचदा भिन्न मूल्ये परत करतात - तुम्ही त्यांच्याशी काय करावे?"

"बरोबर. मी पण विचार केला."

"मग, एक उज्ज्वल भविष्य अपवाद आणि त्रुटी-हँडलिंग यंत्रणेच्या रूपात आले. ते कसे कार्य करते ते येथे आहे:

1. जेव्हा एरर येते, तेव्हा Java मशीन एक विशेष ऑब्जेक्ट तयार करते – एक अपवाद – जिथे ते सर्व त्रुटी माहिती जतन करते. वेगवेगळ्या त्रुटींसाठी वेगवेगळे अपवाद आहेत.

2. अपवादामुळे प्रोग्रॅम ताबडतोब चालू फंक्शनमधून बाहेर पडतो, आणि पुढील फंक्शन आणि असेच - जोपर्यंत तो मुख्य पद्धतीतून बाहेर पडत नाही. मग कार्यक्रम संपतो. प्रोग्रामर असेही म्हणू शकतात की जावा मशीन 'कॉल स्टॅक अनवाइंड करते'."

"पण तुम्ही म्हणालात की कार्यक्रम नेहमी संपत नाही."

"होय, कारण अपवाद पकडण्याचा एक मार्ग आहे. आम्हाला महत्त्वाचे अपवाद पकडण्यासाठी आणि त्यांच्यासोबत काहीतरी करण्यासाठी आम्ही योग्य ठिकाणी विशेष कोड लिहू शकतो. ही महत्त्वाची गोष्ट आहे."

"आम्हाला हे करण्यात मदत करण्यासाठी, एक विशेष ट्राय-कॅच रचना आहे . ते कसे कार्य करते ते येथे आहे:"

प्रोग्रामचे उदाहरण जे अपवाद पकडते (० ने भागाकार) आणि कार्य करत राहते.
public class ExceptionExample2
{
    public static void main(String[] args)
    {
        System.out.println("Program starts");

        try
        {
            System.out.println("Before calling method1");
            method1();
            System.out.println("After calling method1. This will never be shown");
        }
        catch (Exception e)
        {
           System.out.println("Exception has been caught");
        }

        System.out.println("Program is still running");
    }

    public static void method1()
    {
        int a = 100;
        int b = 0;
        System.out.println(a / b);
    }
}
स्क्रीन आउटपुट:
Program starts
Before method1 calling
Exception has been caught
Program is still running

"पण 'आफ्टर कॉलिंग मेथड1. हे कधीही दाखवले जाणार नाही' स्क्रीनवर का दाखवले जाणार नाही?"

"तुम्ही विचारले याचा मला आनंद झाला. २५ व्या ओळीत, आम्ही ० ने भागतो, ज्यामुळे त्रुटी येते - एक अपवाद. Java मशीन त्रुटीबद्दल माहितीसह अंकगणित अपवाद ऑब्जेक्ट तयार करते. ऑब्जेक्ट अपवाद आहे. "

"अपवाद पद्धतीमध्ये आढळतो method1. यामुळे पद्धत ताबडतोब संपुष्टात येते. ट्राय-कॅच ब्लॉकसाठी नसल्यास मुख्य पद्धत संपुष्टात येईल ."

" ट्राय ब्लॉकमध्ये अपवाद आढळल्यास , तो कॅच ब्लॉकमध्ये पकडला जातो . ट्राय ब्लॉकमधील कोडचा उर्वरित भाग कार्यान्वित केला जाणार नाही. त्याऐवजी, कॅच ब्लॉक कार्यान्वित करणे सुरू होईल. "

"मला समजत नाही."

"दुसर्‍या शब्दात, कोड असे कार्य करते:

1. ट्राय ब्लॉकमध्ये अपवाद आढळल्यास , अपवाद जेथे आला तेथे कोड कार्यान्वित करणे थांबवते आणि कॅच ब्लॉक कार्यान्वित करणे सुरू होते.

2. अपवाद न आढळल्यास, प्रयत्न ब्लॉक शेवटपर्यंत कार्यान्वित केला जातो आणि कॅच ब्लॉक कार्यान्वित केला जात नाही . "

"हं?"

"कल्पना करा की प्रत्येक मेथड कॉलनंतर आम्ही पद्धत सामान्यपणे परत आली की अपवादामुळे अचानक संपुष्टात आली की नाही हे तपासा. अपवाद असल्यास, अपवाद पकडण्यासाठी आम्ही कॅच ब्लॉक (जर असेल तर) कार्यान्वित करू. जर कॅच ब्लॉक नसेल, तर आम्ही सध्याची पद्धत संपुष्टात आणतो आणि आम्हाला कॉल केलेली पद्धत तीच तपासणी करते."

"मला वाटतं मला ते आता मिळालं आहे."

"उत्कृष्ट."

"कॅच स्टेटमेंटमध्ये 'अपवाद' म्हणजे काय?"

" सर्व अपवाद असे वर्ग आहेत ज्यांना अपवाद वर्गाचा वारसा मिळतो. आम्ही कॅच ब्लॉकमध्ये अपवाद वर्ग निर्दिष्ट करून विशिष्ट अपवाद पकडू शकतो किंवा आम्ही सर्व अपवाद त्यांच्या सामान्य पालक वर्ग - अपवाद निर्दिष्ट करून पकडू शकतो. नंतर आम्हाला सर्व आवश्यक त्रुटी मिळू शकतात. व्हेरिएबल e मधील माहिती (ते अपवाद ऑब्जेक्टचा संदर्भ संग्रहित करते)."

"छान! माझ्या पद्धतीत वेगळे अपवाद आढळल्यास, मी त्यांच्यावर वेगळ्या पद्धतीने प्रक्रिया करू शकतो का?"

"फक्त तुम्हीच नाही, तर तुम्हीही करायला हवे. तुम्ही हे असे करू शकता:"

उदाहरण:
public class ExceptionExample2
{
    public static void main(String[] args)
    {
        System.out.println("Program starts");

        try
        {
            System.out.println("Before calling method1");
            method1();
            System.out.println("After calling method1. This will never be shown");
        }
        catch (NullPointerException e)
        {
           System.out.println("Null reference. Exception has been caught");
        }
        catch (ArithmeticException e)
        {
            System.out.println("Division by zero. Exception has been caught");
        }
        catch (Exception e)
        {
            System.out.println("Any other errors. Exception has been caught");
        }

        System.out.println("Program is still running");
    }

    public static void method1()
    {
        int a = 100;
        int b = 0;
        System.out.println(a / b);
    }
}

" प्रयत्न ब्लॉकला अनेक कॅच ब्लॉक्ससह जोडले जाऊ शकते , त्यापैकी प्रत्येक विशिष्ट प्रकारचे अपवाद पकडेल."

"मला वाटते की मला समजले आहे. मी हे अजून स्वतः लिहू शकत नाही, परंतु जर मला ते कोडमध्ये आढळले तर मी घाबरणार नाही."