1. अपवाद
>
शेवटी, प्रोग्रामरने त्रुटी हाताळणी प्रमाणित आणि स्वयंचलित करण्याचा विचार केला. जेव्हा अपवादांचा शोध लावला गेला तेव्हा हे घडले . आता अपवाद यंत्रणा 80% अपवादात्मक परिस्थिती हाताळते.
जर काही विद्वान अपवादांसह आले, तर तो कदाचित त्याच्या किंवा तिच्या डॉक्टरेट प्रबंधाचा विषय असेल. जर एखाद्या प्रोग्रामरने ते शोधून काढले असेल, तर त्याला सहकर्मीकडून एक मैत्रीपूर्ण थाप मिळाली असेल: "ठीक आहे, भाऊ."
जेव्हा Java प्रोग्राममध्ये एरर येते, जसे की विभाजन करून 0
, काही आश्चर्यकारक गोष्टी घडतात:
पहिली पायरी
एक विशेष अपवाद ऑब्जेक्ट तयार केला आहे, ज्यामध्ये उद्भवलेल्या त्रुटीबद्दल माहिती आहे.
Java मधील प्रत्येक गोष्ट एक ऑब्जेक्ट आहे, आणि अपवाद अपवाद नाहीत 🙂 अपवाद ऑब्जेक्ट्सचे स्वतःचे वर्ग असतात आणि त्यांना सामान्य वर्गांपेक्षा वेगळे करणारी एकमेव गोष्ट म्हणजे त्यांना वर्गाचा वारसा मिळतो Throwable
.
पायरी दोन
अपवाद ऑब्जेक्ट "फेकून" आहे. कदाचित इथे शब्दरचना अधिक चांगली होऊ शकेल. "अपवाद फेकणे" हे फायर अलार्म ट्रिगर करण्यासारखे किंवा "DEFCON 1" चेतावणी देण्यासारखे आहे.
जेव्हा जावा मशीनवर अपवाद टाकला जातो, तेव्हा प्रोग्रामचे सामान्य ऑपरेशन थांबते आणि "आपत्कालीन प्रोटोकॉल" सुरू होतात.
पायरी तीन
ज्या पद्धतीमध्ये अपवाद टाकला होता ती ताबडतोब बाहेर पडते. अपवाद कॉलिंग पद्धतीमध्ये पास केला जातो, जो त्वरित बाहेर पडतो. आणि पद्धत बाहेर येईपर्यंत साखळी खाली करा main
. जेव्हा main
पद्धत संपुष्टात येते, तेव्हा प्रोग्राम देखील होतो.
उदाहरण:
कोड | कन्सोल आउटपुट |
---|---|
|
|
20 व्या ओळीवर एक अपवाद येतो: 0 ने भागाकार. जावा मशीन ताबडतोब एक अपवाद तयार करते - एक ArithmeticException
ऑब्जेक्ट आणि त्यास पद्धतीवर "फेक" करते.
पद्धत divide()
ताबडतोब संपते, म्हणून आम्हाला स्ट्रिंग कधीही दिसत नाही: काहीही भयंकर घडले नाही: 0. प्रोग्राम पद्धतीकडे परत येतो endTheWorld()
, आणि परिस्थिती स्वतःची पुनरावृत्ती होते: सिस्टममध्ये एक न हाताळलेला अपवाद आहे, ज्याचा अर्थ असा आहे की पद्धत endTheWorld()
देखील असामान्यपणे समाप्त होते. मग main
पद्धत बंद होते आणि प्रोग्राम थांबतो.
या अपवादांचा उद्देश काय आहे? बरं, तुम्ही विशिष्ट प्रकारचे अपवाद पकडण्यासाठी तुमचा स्वतःचा कोड लिहू शकता आणि अपवादात्मक परिस्थिती हाताळण्यासाठी तुमचे स्वतःचे तर्क लिहू शकता.
2. अपवाद पकडणे:try-catch
Java मध्ये एक अपवाद पकडण्याची यंत्रणा आहे जी तुम्हाला पद्धतींची ही असामान्य समाप्ती थांबवू देते. हे असे दिसते:
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
या रचनाला ब्लॉक म्हणतात try-catch
.
कोड जेथे अपवाद असू शकतात ते कुरळे ब्रेसेसमध्ये गुंडाळलेले आहे, शब्दाच्या आधी try
.
कर्ली ब्रेसेस नंतर, आपल्याकडे catch
कीवर्ड आहे आणि कंसात, अपवाद व्हेरिएबलची घोषणा आहे . यानंतर कुरळे ब्रेसेस असतात जे निर्दिष्ट प्रकाराचा अपवाद आढळल्यास अंमलात आणण्यासाठी कोड गुंडाळतात .
" प्राथमिक कोड " ची अंमलबजावणी करताना अपवाद न टाकल्यास , कॅच ब्लॉकमधील कोड अंमलात आणला जाणार नाही. अपवाद आढळल्यास, तो असेल (जर फेकलेल्या अपवादाचा प्रकार कंसातील व्हेरिएबलच्या प्रकाराप्रमाणे असेल तर).
उदाहरण:
कोड | कन्सोल आउटपुट |
---|---|
|
|
3. एकाधिक catch
ब्लॉक्स
सिद्धांतानुसार, सर्व प्रकारचे अपवाद कोडच्या ब्लॉकमध्ये टाकले जाऊ शकतात. काही तुम्ही एका मार्गाने हाताळू इच्छित असाल, इतरांना दुसर्या मार्गाने आणि तरीही काही तुम्ही अजिबात न हाताळण्याचा निर्णय घ्याल.
जावा डेव्हलपर्सनी तुम्हाला मदत करण्याचे ठरवले आणि तुम्हाला ब्लॉक catch
नंतर एक नाही तर अनेक ब्लॉक्स लिहू दिले try
.
try
{
// Code where an exception might occur
}
catch (ExceptionType1 name1)
{
// Code for handling ExceptionType1
}
catch (ExceptionType2 name2)
{
// Code for handling ExceptionType2
}
catch (ExceptionType3 name3)
{
// Code for handling ExceptionType3
}
उदाहरण:
कोड | कन्सोल आउटपुट |
---|---|
|
|
catch
4. ब्लॉक्सचा क्रम
ब्लॉकमध्ये येणारे अपवाद try
फक्त एकाच catch
ब्लॉकद्वारे पकडले जाऊ शकतात. तुमच्याकडे अपवाद हाताळण्याची परिस्थिती असू शकत नाही जिथे एकाधिक ब्लॉक्समधील कोड catch
कार्यान्वित केला जातो.
पण ब्लॉक्सचा क्रम महत्त्वाचा आहे.
तुमच्याकडे अशी परिस्थिती असू शकते जिथे अपवाद एकाधिक ब्लॉक्सद्वारे पकडला जाऊ शकतो. तसे असल्यास, अपवाद हा जो कॅच ब्लॉक प्रथम येईल त्याद्वारे पकडला जाईल (ब्लॉकच्या सर्वात जवळ try
).
तुमच्याकडे अशी परिस्थिती कशी असू शकते जिथे एकाधिक कॅच ब्लॉक समान अपवाद पकडू शकतात?
सर्व अपवाद एकाच वारसा पदानुक्रमाचे आहेत — आकृती पहा.
एखाद्या ArithmeticException
व्हेरिएबलला ऑब्जेक्ट नियुक्त केला जाऊ शकतो ज्याचा प्रकार ArithmeticException
किंवा त्याच्या पूर्वज वर्गांपैकी कोणताही आहे: RuntimeException
, Exception
आणि Throwable
— आकृती पहा.
आम्ही लेव्हल 21 मध्ये वारसा आणि पूर्वजांच्या वर्गांबद्दल अधिक बोलू.
हा कोड अगदी व्यवस्थित संकलित करेल:
वारसाचे फायदे: |
---|
|
ArithmeticException
त्यामुळे तुम्ही वरील 4 पैकी कोणत्याही ब्लॉकला पकडू शकता catch
.
उदाहरण १:
कोड | कन्सोल आउटपुट |
---|---|
|
|
या उदाहरणात, आणि ब्लॉक्स् ArithmeticException
दोन्हीद्वारे पकडले जाऊ शकते . तो ब्लॉकच्या सर्वात जवळ असलेल्या ब्लॉकद्वारे पकडला जाईल — पहिला ब्लॉक.catch (Exception e)
catch (ArithmeticException e)
try
catch
आश्चर्य टाळण्यासाठी, ब्लॉक्सच्या सूचीच्या शेवटीcatch
जवळजवळ प्रत्येक अपवाद पकडू शकणारे ब्लॉक्स ठेवणे चांगले .catch
हा प्रकार साधारणपणे Java मधील प्रत्येक संभाव्य अपवाद पकडण्यातThrowable
सक्षम आहे . जर तुम्ही ते पहिल्या ब्लॉकमध्ये ठेवले, तर कोड संकलित होणार नाही, कारण कंपाइलरला माहित आहे की कोडचे अगम्य ब्लॉक्स आहेत.catch