अपवाद प्रकार

"मला आज आणखी एका गोष्टीबद्दल बोलायचे आहे. Java मध्ये, सर्व अपवाद दोन प्रकारांमध्ये विभागले गेले आहेत: चेक केलेले आणि अनचेक केलेले (ज्यांना पकडले पाहिजे आणि जे तुम्हाला पकडायचे नाहीत). डीफॉल्टनुसार, सर्व अपवाद असणे आवश्यक आहे. झेल."

"तुम्ही तुमच्या कोडमध्ये हेतुपुरस्सर अपवाद टाकू शकता?"

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

"ठीक आहे."

"जर ClassNotFoundException किंवा FileNotFoundException एखाद्या पद्धतीमध्ये फेकले गेले (आहेत) तर, विकासकाने त्यांना पद्धतीच्या घोषणेमध्ये सूचित केले पाहिजे. हे तपासलेले अपवाद आहेत. हे सहसा असे दिसते:"

तपासलेल्या अपवादांची उदाहरणे
public static void method1() throws ClassNotFoundException, FileNotFoundException
public static void main() throws IOException
public static void main() // Doesn't throw any exceptions

"म्हणून आम्ही फक्त 'थ्रो' लिहितो आणि त्यानंतर अपवादांची स्वल्पविरामाने मर्यादित केलेली यादी, बरोबर?"

method1"होय. पण अजून काही आहे. प्रोग्राम संकलित करण्यासाठी, खालील उदाहरणामध्ये कॉल करणार्‍या पद्धतीने दोनपैकी एक गोष्ट करणे आवश्यक आहे: एकतर हे अपवाद पकडा किंवा त्यांना (कॉलरला) पुन्हा फेकून द्या , त्याच्या घोषणेमध्ये पुन्हा दिलेले अपवाद दर्शवितात. "

"पुन्हा. जर तुमच्या मुख्य पद्धतीला ' थ्रो FileNotFoundException , ...' समाविष्ट असलेल्या मेथडला कॉल करायचा असेल , तर तुम्हाला दोन गोष्टींपैकी एक करणे आवश्यक आहे:

1) FileNotFoundException पकडा , …

तुम्ही असुरक्षित पद्धतीला कॉल करणारा कोड ट्राय-कॅच ब्लॉकमध्ये गुंडाळला पाहिजे.

2) FileNotFoundException पकडू नका , …

तुम्ही तुमच्या मुख्य पद्धतीच्या थ्रो सूचीमध्ये हे अपवाद जोडले पाहिजेत ."

"तुम्ही मला एक उदाहरण देऊ शकता?"

"हे पहा:"

तपासलेल्या अपवादांची उदाहरणे
public static void main(String[] args)
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"या उदाहरणातील कोड संकलित होणार नाही, कारण मुख्य पद्धत मेथड1() ला कॉल करते , जे अपवाद सोडते जे पकडले जावेत."

"ते संकलित करण्यासाठी, आम्हाला मुख्य पद्धतीमध्ये अपवाद हाताळणी जोडणे आवश्यक आहे. तुम्ही हे दोनपैकी एका मार्गाने करू शकता:"

पर्याय 1: आम्ही फक्त अपवाद (कॉलरला) पुन्हा फेकतो:
public static void main(String[] args)  throws FileNotFoundException, ClassNotFoundException
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"आणि इथे आम्ही प्रयत्न करून पकडतो :"

पर्याय २: अपवाद पहा:
public static void main(String[] args)
{
    try
    {
        method1();
    }
    catch(Exception e)
    {
    }
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"हे अधिक स्पष्ट होऊ लागले आहे."

"खालील उदाहरण पहा. ते तुम्हाला बाकीचे समजण्यास मदत करेल."

अपवाद हाताळण्याऐवजी, आम्ही त्यांना कॉल स्टॅकच्या खाली असलेल्या पद्धतींवर पुन्हा फेकतो ज्यांना ते कसे हाताळायचे हे माहित आहे:
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
    method1();
}
एक अपवाद हाताळा आणि दुसरा फेकून द्या:
public static void method3() throws ClassNotFoundException
{
   try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
}
दोन्ही अपवाद पकडा, काहीही न टाका:
public static void method4()
{
    try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
    catch (ClassNotFoundException e)
    {
        System.out.println("ClassNotFoundException has been caught.");
    }
}

"आणखी एक प्रकारचा अपवाद आहे, RuntimeException आणि त्याचे वारसा असलेले वर्ग. तुम्हाला ते पकडण्याची गरज नाही. हे अनचेक केलेले अपवाद आहेत. त्यांना अंदाज लावणे कठीण मानले जाते. तुम्ही त्यांच्याशी तशाच प्रकारे व्यवहार करू शकता, परंतु तुम्ही त्यांना थ्रो क्लॉजमध्ये सूचित करण्याची आवश्यकता नाही ."