जावा में, क्या exceptions
व्यक्तिगत रूप से अपवाद को पकड़ने के बजाय सभी को पकड़ना (पकड़ना) है ?
जावा में, क्या exceptions
व्यक्तिगत रूप से अपवाद को पकड़ने के बजाय सभी को पकड़ना (पकड़ना) है ?
जवाबों:
यदि आप चाहें, तो आप अपने तरीकों से थ्रो क्लॉस जोड़ सकते हैं। फिर आपको तुरंत जांचे गए तरीकों को नहीं पकड़ना है। इस तरह, आप exceptions
बाद में (शायद दूसरे के समान समय पर) पकड़ सकते हैंexceptions
)।
कोड ऐसा दिखता है:
public void someMethode() throws SomeCheckedException {
// code
}
फिर बाद में आप इससे निपट सकते हैं exceptions
उनसे निपट सकते हैं यदि आप उनसे उस तरीके से निपटना नहीं चाहते हैं।
सभी अपवादों को पकड़ने के लिए कोड के कुछ ब्लॉक को आप फेंक सकते हैं: (यह भी Exceptions
आपको खुद लिखा होगा )
try {
// exceptional block of code ...
// ...
} catch (Exception e){
// Deal with e as you please.
//e may be any type of exception at all.
}
कारण यह है कि काम करता है क्योंकि Exception
सभी अपवादों के लिए आधार वर्ग है। इस प्रकार कोई भी अपवाद जो फेंका जा सकता है वह है एक Exception
(अपरकेस 'ई')।
यदि आप अपने स्वयं के अपवादों को संभालना चाहते हैं, तो पहले केवल catch
सामान्य अपवाद एक से पहले एक ब्लॉक जोड़ें ।
try{
}catch(MyOwnException me){
}catch(Exception e){
}
जबकि मैं मानता हूं कि कच्ची अपवाद को पकड़ने के लिए यह अच्छी शैली नहीं है, अपवादों से निपटने के तरीके हैं जो बेहतर लॉगिंग के लिए प्रदान करते हैं, और अप्रत्याशित को संभालने की क्षमता। चूंकि आप एक असाधारण स्थिति में हैं, तो आप शायद प्रतिक्रिया समय की तुलना में अच्छी जानकारी प्राप्त करने में अधिक रुचि रखते हैं, इसलिए उदाहरण प्रदर्शन बहुत बड़ा नहीं होना चाहिए।
try{
// IO code
} catch (Exception e){
if(e instanceof IOException){
// handle this exception type
} else if (e instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this one. What could it be? Let's log it, and let it bubble up the hierarchy.
throw e;
}
}
हालांकि, यह इस तथ्य को ध्यान में नहीं रखता है कि आईओ एरर को भी फेंक सकते हैं। त्रुटियां अपवाद नहीं हैं। त्रुटियां अपवादों की तुलना में एक अलग विरासत पदानुक्रम के तहत हैं, हालांकि दोनों आधार वर्ग को फेंक देते हैं। चूंकि आईओ एरर्स को फेंक सकते हैं, आप थ्रोबेबल को पकड़ने के लिए इतनी दूर जाना चाह सकते हैं
try{
// IO code
} catch (Throwable t){
if(t instanceof Exception){
if(t instanceof IOException){
// handle this exception type
} else if (t instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this Exception. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else if (t instanceof Error){
if(t instanceof IOError){
// handle this Error
} else if (t instanceof AnotherError){
//handle different Error
} else {
// We didn't expect this Error. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else {
// This should never be reached, unless you have subclassed Throwable for your own purposes.
throw t;
}
}
आधार अपवाद को पकड़ो 'अपवाद'
try {
//some code
} catch (Exception e) {
//catches exception and all subclasses
}
अपवाद को पकड़ने के लिए यह बुरा अभ्यास है - यह बहुत व्यापक है, और आप NullPointerException की तरह कुछ याद कर सकते हैं अपने स्वयं के कोड में ।
अधिकांश फ़ाइल संचालन के लिए, IOException मूल अपवाद है। इसके बजाय, उसे पकड़ने के लिए बेहतर है।
हाँ वहाँ है।
try
{
//Read/write file
}catch(Exception ex)
{
//catches all exceptions extended from Exception (which is everything)
}
आप एकल कैच ब्लॉक में कई अपवादों को पकड़ सकते हैं।
try{
// somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
// handle exception.
}
क्या आपका मतलब है कि Exception
किसी भी प्रकार का एक पकड़ है जिसे केवल विशिष्ट अपवादों के विपरीत फेंक दिया जाता है?
यदि ऐसा है तो:
try {
//...file IO...
} catch(Exception e) {
//...do stuff with e, such as check its type or log it...
}