2013-07-13 27 views
9

में अपवाद फेंकने मैं कारण है कि मैं मुख्य विधि में throw अपवाद करने के लिए है, जबकि मैं try/catch ब्लॉक कि उनमें से किसी अपवाद वैसे भी संभाल कर सकते हैं है यह पता लगाने की कोशिश कर रहा हूँ? भले ही मैं throws IllegalArgumentException,InputMismatchException भाग हटा दूं, फिर भी प्रोग्राम संकलित और पूरी तरह से काम करेगा।मुख्य विधि

public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{ 
    boolean flag = true; 
    Scanner in = new Scanner(System.in); 
    do{ 
     try{ 
      System.out.println("Please enter the number:"); 
      int n = in.nextInt(); 
      int sum = range(n); 
      System.out.println("sum = " + sum); 
      flag = false; 
     } 
     catch(IllegalArgumentException e){ 
      System.out.println(e.getMessage()); 
     } 
     catch(InputMismatchException e){ 
      System.out.println("The number has to be as integer..."); 
      in.nextLine(); 
     } 
+8

आप समुद्र में हैं और एक व्यक्ति डूब रहा है। अपवाद यह है कि आपका दोस्त कह रहा है 'ओह मैन, वहां देखो! वह डूब रहा है! क्या हमें कुछ करना चाहिए? "। अपने 'पकड़' खंड में आप अपनी 'saveTheMan()' विधि को परिभाषित कर सकते हैं। वैसे, यदि पहले से ही एक लाइफगार्ड है जो आप 'कोशिश' निर्माण के बीच निष्पादित करने का प्रयास कर रहे हैं, वहां वास्तव में 'पकड़' क्लॉजोल में प्रवेश करने की आवश्यकता नहीं है क्योंकि आपकी मदद बेकार होगी। – Rob013

उत्तर

7

आपको अपवाद फेंक अगर आप चाहते हैं कि यह एक "उच्च" समारोह द्वारा नियंत्रित किया जा करने के लिए।

(नोट:।। अपवाद सिर्फ गायब नहीं होता है जब यह फेंक दिया जाता है यह अभी भी नियंत्रित किया गया है)

public void functionA() throws Exception{ 
    throw new Exception("This exception is going to be handled elsewhere"); 
} 

आप एक try/catch ब्लॉक का उपयोग करके ऐसी अपवाद हैंडल करना चाहते हैं हाथोंहाथ।

public void functionB(){ 
    try{ 
    throw new Exception("This exception is handled here."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 

आप पहले से ही एक अपवाद को पकड़ने के लिए एक try/catch ब्लॉक उपयोग कर रहे हैं, तो आप उस अपवाद किसी भी उच्च फेंक करने की कोई जरूरत नहीं है।

public void functionC() throws Exception{ 
    try{ 
    throw new Exception("This exception doesn't know where to go."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 
2

सरल जवाब:

आप एक प्रणाली की घोषणा करने के लिए फेंक अगर सब जांचे हुए अपवादों कोड द्वारा नियंत्रित किया जाता है की जरूरत नहीं है।

यह भी देखें:

http://www.javapractices.com/topic/TopicAction.do?Id=129

1

कभी-कभी कॉलिंग पार्टी एक अपवाद फेंकना नहीं चाहती क्योंकि वे ऐसे अपवादों को संभालना नहीं चाहते हैं। ऐसे मामलों में हम उस कोड को संलग्न करते हैं जो अंततः ब्लॉक को पकड़ने के प्रयासों के साथ अपवाद फेंक सकता है।

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

यह अनुशंसा की जाती है कि अपवादों को निगलें और न ही अपवाद को फिर से पकड़ें और फिर से फेंक दें।

0

असल में चेक अपवादों को संभालने की आवश्यकता है। ऐसा करने के लिए कंपाइलर बलों। आप या तो पकड़ने या खंड फेंकने के द्वारा ऐसा कर सकते हैं। उनमें से एक पर्याप्त है।

जब आप कोड को कॉल करके उस अपवाद को संभालना नहीं चाहते हैं तो आप पहले दृष्टिकोण का सहारा लेंगे।

पहले चुनाव विधि एक पकड़ने का उपयोग कर के भीतर अपवाद को संभालने के लिए है और इसके बारे में किसी को नहीं है:

3

कोई भी तरीका अपवाद है कि विधि में हो सकता है से निपटने के लिए दो विकल्प हैं। यह दृष्टिकोण त्रुटियों को संभालने में उपयोगी है, जो इसे कॉल करने के तरीके पर कोई प्रभाव नहीं पड़ेगा।

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

मुझे नहीं लगता कि मुख्य विधि अपवादों को फेंकना वास्तव में एक अच्छा विचार है। क्योंकि यदि आप इसे फेंक नहीं देते हैं, तो JVM को अपवाद मिलेगा और बाहर निकल जाएगा। सबसे अच्छा आप कर सकते हैं उन excepitons को पकड़ने और मुख्य के भीतर कुछ सुधारात्मक कार्रवाई करने की कोशिश करना है। यदि अपवाद आपदाजनक है चाहे आप इसे फेंक दें या नहीं, प्रोग्राम बाहर निकल जाएगा।

0

आप कोशिश-पकड़ का उपयोग करके अपने कोड में अपना अपवाद संभालने वाले हैं। यही कारण है।

संबंधित मुद्दे