दिलचस्प पोस्ट
एंड्रॉइड स्क्रीन पर छवियां खींचें और ड्रॉप करें? स्टेक ट्रेस को खोए बिना जावा में अपग्रेड करना अपवाद मेरा उद्देश्य-सी सिंगलटन कैसा दिखता है? अप्रचलित चेतावनी: पल निर्माण जेएस दिनांक पर वापस गिर जाता है @ रूनविथ (मोकिटोज्यूनेट रूननर। क्लास) बनाम मोकोइटा एनोटेशन। इंडिक्स (यह) सी ++ मानक कहां बिल्कुल एक अनियिनित पॉइंटर को डिफरेंसिंग करना अपरिभाषित व्यवहार है? सी ++, फ्री-स्टोर बनाम हीप उस फ़ंक्शन के भीतर फ़ंक्शन का नाम निर्धारित करें (ट्रैसबैक का उपयोग किए बिना) JQuery UI स्वत: पूर्ण में HTML का उपयोग करना PHP में एक साथ दो स्ट्रिंग को कैसे जोड़ूँ? मैं CSS क्रॉस-ब्राउज़र के साथ ऊर्ध्वाधर पाठ कैसे आकर्षित करूं? जावा से पर्यावरण चर कैसे सेट करूं? आईफ़ोन के लिए ओपन सोर्स कवर फ़्लो लाइब्रेरी स्ट्रिंग होने का तरीका। केवल "पूरे शब्दों" एक एएसपी.नेट कोर डि कंटेनर के अंदर तीसरे पक्ष डि कंटेनर का प्रयोग क्यों किया जाएगा?

क्या मैं एक ही कैच क्लॉज में कई जावा अपवादों को पकड़ सकता हूं?

जावा में, मैं ऐसा कुछ करना चाहता हूं:

try { ... } catch (IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException e) { someCode(); } 

…के बजाय:

 try { ... } catch (IllegalArgumentException e) { someCode(); } catch (SecurityException e) { someCode(); } catch (IllegalAccessException e) { someCode(); } catch (NoSuchFieldException e) { someCode(); } 

क्या इसे करने का कोई तरीका है?

वेब के समाधान से एकत्रित समाधान "क्या मैं एक ही कैच क्लॉज में कई जावा अपवादों को पकड़ सकता हूं?"

जावा 7 के बाद से यह संभव है Try-catch ब्लॉक के लिए सिंटैक्स है:

 try { ... } catch (IOException | SQLException ex) { ... } 

जावा 7 से पहले यह संभव नहीं था हालांकि याद रखें, यदि सभी अपवाद समान श्रेणी के पदानुक्रम से संबंधित हैं, तो आप उस आधार अपवाद प्रकार को आसानी से पकड़ सकते हैं। एकमात्र तरीका है अपने कैच ब्लॉक में प्रत्येक अपवाद को पकड़ना।

संपादित करें: ध्यान दें कि जावा 7 में, आप अपवाद 1 और अपवाद बी दोनों को उसी ब्लॉक में नहीं पकड़ सकते हैं यदि अपवाद बी विरासत में मिला है, या तो सीधे या अप्रत्यक्ष रूप से, अपवाद A से। कंपाइलर शिकायत करेगा: The exception ExceptionB is already caught by the alternative ExceptionA

जावा 7 के ठीक पहले नहीं बल्कि, मैं ऐसा कुछ करूँगा:

जावा 6 और इससे पहले

 try { //..... } catch (Exception exc) { if (exc instanceof IllegalArgumentException || exc instanceof SecurityException || exc instanceof IllegalAccessException || exc instanceof NoSuchFieldException ) { someCode(); } else if (exc instanceof RuntimeException) { throw (RuntimeException) exc; } else { throw new RuntimeException(exc); } } 

जावा 7

 try { //..... } catch ( IllegalArgumentException | SecurityException | IllegalAccessException |NoSuchFieldException exc) { someCode(); } 

जावा 7 में आप कई कैच क्लाउड को परिभाषित कर सकते हैं जैसे:

 catch (IllegalArgumentException | SecurityException e) { ... } 

नहीं, प्रति ग्राहक एक।

आप एक सुपर क्लास को पकड़ सकते हैं, जैसे java.lang.Exception, जब तक आप सभी मामलों में एक ही कार्रवाई करते हैं।

 try { // some code } catch(Exception e) { //All exceptions are caught here as all are inheriting java.lang.Exception e.printStackTrace(); } 

लेकिन यह सबसे अच्छा अभ्यास नहीं हो सकता है जब आप वास्तव में इसे संभालने के लिए एक रणनीति रखते हैं, तो आपको केवल अपवाद को पकड़ना चाहिए – और लॉगिंग और पुनर्स्थापना "इसे संभालना" नहीं है यदि आपके पास सुधारात्मक कार्रवाई नहीं है, तो इसे विधि हस्ताक्षर में जोड़ने के लिए बेहतर है और इसे किसी ऐसे व्यक्ति तक बुलबुला कर दें, जो स्थिति को संभाल सके।

अगर अपवादों की एक पदानुक्रम है तो आप अपवाद के सभी उप-वर्गों को पकड़ने के लिए आधार वर्ग का उपयोग कर सकते हैं। अधूरे मामले में आप सभी जावा अपवादों को इस प्रकार देख सकते हैं:

 try { ... } catch (Exception e) { someCode(); } 

एक अधिक सामान्य मामले में अगर रिपॉज़िटरी एक्सपैशन आधार क्लास है और पथनोटफ़ाउंड अपवाद एक व्युत्पन्न वर्ग है तो:

 try { ... } catch (RepositoryException re) { someCode(); } catch (Exception e) { someCode(); } 

उपरोक्त कोड एक तरह से अपवाद हैंडलिंग के लिए रिपॉजिटरी अप्सप्शन और पाथनोटफ़ाउंड अपवाद पकड़ लेगा और अन्य सभी अपवादों को एक साथ जोड़ दिया जाएगा। जावा 7 के बाद से, ऊपर @ ऑस्कररिज के उत्तर के अनुसार:

 try { ... } catch( IOException | SQLException ex ) { ... } 

जावा 6 (यानी एंड्रॉइड) पर एक क्लीनर (लेकिन कम वर्बोस, और संभवत: पसंदीदा नहीं के रूप में) वैकल्पिक उपयोगकर्ता454322 के उत्तर में सभी Exception को पकड़ने और रनटाइम अपेशन एस पुनः लोड करने के लिए होगा। यह कार्य नहीं करेगा यदि आप अन्य प्रकार के अपवादों को आगे ढेर के ऊपर पकड़ने की योजना बना रहे हैं (जब तक कि आप उन्हें फिर से फेंक न दें), लेकिन सभी चेक अपवादों को प्रभावी ढंग से पकड़ लेंगे।

उदाहरण के लिए:

 try { // CODE THAT THROWS EXCEPTION } catch (Exception e) { if (e instanceof RuntimeException) { // this exception was not expected, so re-throw it throw e; } else { // YOUR CODE FOR ALL CHECKED EXCEPTIONS } } 

कहा जा रहा है कि, वर्बोसिटी के लिए, यह एक बूलीयन या कुछ अन्य चर सेट करना सबसे अच्छा होगा और उस पर आधारित होगा -कैक ब्लॉक के बाद कुछ कोड निष्पादित करें।

पूर्व में 7 के बारे में कैसे:

  Boolean caught = true; Exception e; try { ... caught = false; } catch (TransformerException te) { e = te; } catch (SocketException se) { e = se; } catch (IOException ie) { e = ie; } if (caught) { someCode(); // You can reference Exception e here. } 

हाँ, आप जावा 7 में यह उदाहरण देख सकते हैं

 try { //your code } catch(SQLException | IOException ex) { } 

लेकिन आपको मल्टी कैच के कुछ नियमों को ध्यान में रखना होगा, जिसे आप नीचे दिए गए लिंक पर पा सकते हैं http://pictorialjava.blogspot.in/2015/11/exception-handling-in-java-7.html

जावा एसई 7 और बाद में कई पकड़ बयान नीचे संभव हैं ..

 try{ // business logic.... } catch(IOException | SQLException ex){ // handle exception of both types... } 

दिमाग के अंक …

  1. सिंगल कैल ब्लॉक एक से अधिक प्रकार के अपवाद को संभाल सकता है।
  2. दोनों अपवाद एक ही प्रकार का नहीं होना चाहिए, अर्थात आप एकल कैच ब्लॉक में IOException या SQLException के उपवर्ग अपवाद को पकड़ नहीं सकते हैं।

  3. कैच पैरामीटर एक्स स्पष्ट रूप से अंतिम है, आप इसे किसी भी मान निर्दिष्ट नहीं कर सकते।

  4. सभी अपवादों को लंबवत बार पाइप (|) के द्वारा अलग किया जाना चाहिए

अपवाद पदानुक्रम में एक अभिभावक वर्ग होने के अपवाद को पकड़ो। यह निश्चित रूप से बुरा व्यवहार है । आपके मामले में, अपवाद वर्ग सामान्य अभिभावक अपवाद होता है, और अपवाद का एक उदाहरण है, जो किसी अपवाद को पकड़ना वास्तव में बुरा व्यवहार है – जैसे अपवाद NullPointerException आमतौर पर प्रोग्रामिंग त्रुटियां हैं और आमतौर पर शून्य मानों की जांच करके इसे हल किया जाना चाहिए

 try { ... } catch (IllegalArgumentException | SecurityException | IllegalAccessException | NoSuchFieldException e) { //even you can check here like if(e instanceof IllegalArgumentException){ //like wise you can check the type of the exception, its just an info may not required } someCode(); } 

हाँ तुम कर सकते हो…

पकड़ (अरिथमेटिकएक्सेशन | अर्रेइंडएक्सऑफबाउंड | रनटाइमएक्सेप्शन | अपवाद पूर्व) {ex.printStackTrace (); }

आपको और अधिक विशिष्ट अपवाद डालना होगा .. पहले सबवे वर्ग और फिर सुपर वर्ग …